Sur un nouveau petit projet que j'écris en ce moment histoire de faire le saut entre PHP et C# j'essaie de jouer avec l'URLRewriting.
Selon ce que j'ai pu lire sur le sujet il suffit d'écrire trois lignes de plus dans le web.config ( le <httpModule> <add /> </httpModule> ) et dans une nouvelle classe implémenter IHttpModule.
J'ai pu faire tout ça pour l'instant et toujours pour l'instant en local tout semble bien fonctionner. Après les tests je fait un build et l'URL Rewrite fonctionne à merveille. J'envoie le tout par ftp et c'est là que ça part en sucette . J'ai droit à une jolie erreur 404...
En gros les codes importants:
web.config :
messengertricks.UrlRewriterModule :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <system.web> <customErrors mode="On"> <error statusCode="404" redirect="~/Error404.aspx" /> </customErrors> <httpModules> <add name="HttpRewriteModule" type="messengertricks.UrlRewriterModule, messengertricks"/> </httpModules> </system.web>
et svc.aspx là où c'est redirigé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 namespace messengertricks { public class UrlRewriterModule : IHttpModule { public void Init(HttpApplication context) { context.BeginRequest += context_BeginRequest; } public void context_BeginRequest (object sender, EventArgs args) { HttpApplication application = sender as HttpApplication; HttpContext context = (application == null) ? null : application.Context; if (context != null) { HttpRequest request = context.Request; string urlpath = request.Url.ToString(); if (urlpath.Contains("imgsvc")) { string[] urlparams = urlpath.Substring(urlpath.IndexOf("imgsvc")).Split('/'); if (urlparams.Count() >= 4) { string tpl = urlparams[1].Substring(1); string svc = urlparams[2].Substring(1); string ident = urlparams[3]; context.RewritePath(String.Format("~/Svc.aspx?tpl={0}&svc={1}&Ident={2}", tpl, svc, ident)); } } } } public void Dispose() { } } }
C'est pas très clean mais bon, j'espère que vous pourrez m'aider sur ce point.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 namespace messengertricks { public partial class Svc : System.Web.UI.Page { DcDataContext db = new DcDataContext(ConfigurationManager.ConnectionStrings["dbcs"].ConnectionString); protected void Page_Load(object sender, EventArgs e) { string[] TemplateTypes = new string[1] { "SmallOnlineIcon" }; string[] ServiceType = new string[] { "MSN", "YIM", "AIM", "Skype", "ICQ", "Gchat" }; int ident = Int32.Parse((Request.QueryString["Ident"] == null) ? "0" : Request.QueryString["Ident"]); string tpl = Request.QueryString["tpl"]; string svc = Request.QueryString["svc"]; if (string.IsNullOrEmpty(tpl) || string.IsNullOrEmpty(svc) || string.IsNullOrEmpty(ident.ToString())) { throw new HttpException(404, "La requête demandée est indisponible ou n'existe pas."); } else { var query = from q in db.mt_handles where q.id == ident select q; if (query.Count() != 0) { var row = query.First(); Response.Redirect("http://messenger.services.live.com/users/" + row.@params + "/presenceimage/"); } else { throw new HttpException(404, "La requête demandée est indisponible ou n'existe pas."); } } } }
Partager