{"id":310,"date":"2013-05-28T22:52:30","date_gmt":"2013-05-28T22:52:30","guid":{"rendered":"06eb61b839a0cefee4967c67ccb099dc"},"modified":"2013-05-28T22:52:30","modified_gmt":"2013-05-28T22:52:30","slug":"","status":"publish","type":"post","link":"https:\/\/www.xiaobo.li\/notes\/archives\/310","title":{"rendered":"Asp.net Routing UrlRewrite"},"content":{"rendered":"<pre class=\"brush:c#; toolbar: true; auto-links: true;\">void Application_Start(object sender, EventArgs e)\r\n{\r\n    \/\/\u8c03\u7528 RegisterRoutes() \u6765\u6ce8\u518c Url \u8def\u7531\r\n    RegisterRoutes(RouteTable.Routes);\r\n}\r\n \r\nprivate static void RegisterRoutes(RouteCollection routes)\r\n{\r\n    IRouteHandler rssRouteHandler = new RssRouteHandler();\r\n \r\n    \/\/\u5bf9\u4e8e \/rss-type-num \u8fd9\u79cd\u89c4\u5219\u7684 Url \u4f1a\u8f6c\u5230 rssRouteHandler \u5b9e\u4f8b\u6765\u5904\u7406\r\n    routes.Add(new Route(\"rss-{type}-{num}\", rssRouteHandler));\r\n \r\n    \/\/\u53ef\u4ee5\u8c03\u7528 Add \u6ce8\u518c\u591a\u4e2a\u8def\u7531\u9879\uff0c\u8fd8\u53ef\u4ee5\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f\r\n    \/\/\u6bd4\u5982\u4e0b\u9762\uff0cUrl \u4e3a \/rss\/type\/num\/2010-02-12\/2010-8-9 \u8f6c\u5230 rssRouteHandler \u6765\u5904\u7406\r\n    routes.Add(new Route(\"rss\/{type}\/{num}\/{dateStart}\/{dateEnd}\",\r\n                new RouteValueDictionary(),\r\n                new RouteValueDictionary(\r\n                   new { dateStart = @\"\\d{4}-\\d{1,2}-\\d{1,2}\", dateEnd = @\"\\d{4}-\\d{1,2}-\\d{1,2}\" }\r\n                ), rssRouteHandler));\r\n}<p><\/p>\r\n<p><\/p>\r\nusing System.Web;\r\nusing System.Web.Routing;\r\n \r\n\/\/\/ &lt;summary&gt;\r\n\/\/\/ Summary description for RssRouteHandler\r\n\/\/\/ &lt;\/summary&gt;\r\npublic class RssRouteHandler : IRouteHandler\r\n{\r\n    public IHttpHandler GetHttpHandler(RequestContext requestContext)\r\n    {\r\n        return new RssProvider(requestContext);\r\n    }\r\n}<p><\/p>\r\n<p><\/p>\r\nusing System;\r\nusing System.Web;\r\nusing System.Web.Routing;\r\n \r\n\/\/\/ &lt;summary&gt;\r\n\/\/\/ Summary description for RssProvider\r\n\/\/\/ &lt;\/summary&gt;\r\npublic class RssProvider : IHttpHandler\r\n{\r\n    public RequestContext RequestContext { get; private set; }\r\n \r\n    public RssProvider(RequestContext context)\r\n    {\r\n        this.RequestContext = context;\r\n    }\r\n \r\n    \/\/\u6682\u4e14\u8ba9\u5b83\u53ea\u5904\u7406 \/rss-type-num \u89c4\u5219\u7684 Url\r\n    public virtual void ProcessRequest(HttpContext context)\r\n    {\r\n        string type = RequestContext.RouteData.Values[\"type\"].ToString();\r\n        int num = Int32.Parse(RequestContext.RouteData.Values[\"num\"].ToString());\r\n \r\n        \/\/\u6bd4\u5982\u53ef\u4ee5\u8f6c\u6362\u51fa\u5b9e\u9645 URI \u53bb\u6267\u884c\r\n        \/\/context.Server.Execute(\"rss.aspx?type=\"+type+\"&amp;num=\"+num);\r\n \r\n        context.Response.Write(\"Type: \" + type +\" ; \" + \"Number: \" + num + \"&lt;br\/&gt;\");\r\n        context.Response.Write(\"\u6839\u636e\u4e0a\u9762\u6761\u4ef6\u8bbe\u7f6e\u54cd\u5e94\u5934\uff0c\u8f93\u51fa\u9700\u8981\u7684 RSS \u6570\u636e\u3002\");\r\n    }\r\n    public bool IsReusable\r\n    {\r\n        get { return false; }\r\n    }\r\n}<\/pre>\n<p><strong>\u914d\u7f6e IIS6 \u4f7f\u5176\u4ed6\u672a\u77e5\u8bf7\u6c42\u7c7b\u578b\u4e5f\u7531 Asp.Net \u6765\u5904\u7406<\/strong> <\/p>\n<p>\u5982\u679c\u662f\u5728 Visual Studio 2008 \u7684\u8c03\u8bd5\u73af\u5883\u53ef\u4ee5\u4e0d\u4f5c\u6b64\u914d\u7f6e\uff0c\u81ea\u52a8\u652f\u6301\u3002<\/p>\n<p>\u5bf9\u4e8e IIS 7 \u4e5f\u4e0d\u9700\u8981\u4f5c\u7279\u522b\u7684\u8bbe\u7f6e\u3002XP \u73af\u5883\u7684 IIS6 \u548c Win2003 \u4e0b\u7684 IIS6 \u914d\u7f6e\u8fd8\u7565\u6709\u4e0d\u540c\uff1a <\/p>\n<p>Win2003 \u4e0b IIS6 \u914d\u7f6e\uff1aDefault Web Site \u7684\u5c5e\u6027\uff0cHome Directory \u6807\u7b7e\u9875\u91cc\uff0cConfiguation...\uff0c\u4e3a <\/p>\n<p>Wildcard application maps(order of implementation) Insert \u4e00\u9879\uff0c<\/p>\n<p>\u6307\u5411\u5230 c:\\windows\\microsoft.net\\framework\\v2.0.50727\\aspnet_isapi.dll\uff0c\u4e0d\u52fe<\/p>\n<p>\u9009 Verify that file exists. XP \u4e0b\u7684 IIS6 \u914d\u7f6e\uff1a\u865a\u62df\u76ee\u5f55\u7684\u5c5e\u6027\u9875(\u4e0d\u662f Default Web Site Properties \u4e86), Virtual Directory \u6807<\/p>\n<p>\u7b7e\u9875\u4e2d\uff0c\u70b9 Configuration \u6309\u94ae\uff0cMaapings, \u70b9 Add \u6309\u94ae\uff0cAdd\/Edit Application Extensiona Mapping \u7a97\u53e3<\/p>\n<p>\u91cc\uff0cExecutable \u91cc\u9009\u62e9 C:\\WINDOWS\\Microsoft.NET\\Framework\\v2.0.50727\\aspnet_isapi.dll,Extension \u91cc\u586b <strong>.*<\/strong>\uff0c\u7136\u540e\u4e0d\u9009 Check that file exists\uff0c\u786e\u5b9a\u5c31\u884c\u4e86\u3002\u8fd9\u6837\u5c31\u5b8c\u6210\u4e86\uff0c\u901a\u8fc7 \/rss-type-num \u6216 \/rss\/type\/num\/dateStart\/dateEnd \u5c31\u4f1a\u6267\u884c\u5230 RssProvider&nbsp; \u7684 ProcessRequest() \u65b9\u6cd5\u4e2d\uff0c\u8fd9\u6837\u5c31\u5b8c\u6210\u4e86\u771f\u5b9e Url \u7684\u91cd\u5199\uff0c\u4e5f\u80fd\u5b9e\u73b0\u4e0d\u9700\u8981 aspx \u6587\u4ef6\u5904\u7406 Http \u8bf7\u6c42<\/p>\n","protected":false},"excerpt":{"rendered":"<pre class=\"brush:c#; toolbar: true; auto-links: true;\">void Application_Start(object sender, EventArgs e)\r\n{\r\n    \/\/\u8c03\u7528 RegisterRoutes() \u6765\u6ce8\u518c Url \u8def\u7531\r\n    RegisterRoutes(RouteTable.Routes);\r\n}\r\n \r\nprivate static void RegisterRoutes(RouteCollection routes)\r\n{\r\n    IRouteHandler rssRouteHandler = new RssRouteHandler();\r\n \r\n    \/\/\u5bf9\u4e8e \/rss-type-num \u8fd9\u79cd\u89c4\u5219\u7684 Url \u4f1a\u8f6c...<\/pre>\n<p> <a href=\"https:\/\/www.xiaobo.li\/notes\/archives\/310\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[283],"tags":[126,127,128],"class_list":["post-310","post","type-post","status-publish","format-standard","hentry","category-technologys","tag-aspnet","tag-routing","tag-urlrewrite"],"_links":{"self":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":0,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/posts\/310\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/media?parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/categories?post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xiaobo.li\/notes\/wp-json\/wp\/v2\/tags?post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}