ASP.NET MVC4 URL路径中带点号出现404错误的解决方案

ASP.NET MVC 2014-06-04 29858浏览 收藏本文

由于项目需求,需要在Url路径中使用如下的路径,如:http://siteexample.com/promo/domain.com 其中路径中的最后一部分表示一个网站的域名 首先这个请求路径是由控制器Promo来控制的,其Action为Index,根据路径需求,得采用路由来映射了,具体的映射规则如下:

 public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
      routes.MapRoute("Store Details", @"promo/{domain}", new { controller = "Promo", action = "Index", domain = UrlParameter.Optional }
        );
      //默认路由映射规则
      routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    }
在配置好路由规则后以为万事大吉了,但测试结果却在意料之外,出现如下404错误 mvc-dot-404 开始一直以为是路由配置规则不正确,经过多次测试仍不解,后把domain.com参数换成id数字进行测试结果正常,于是考虑是参数的问题。最后确认是由于参数中有点号,被IIS过滤规则给过滤掉,问题找到了,自然就要想解决方案了,参考了一些资料,亲测至少有两种以上的解决办法: 1.在网站的配置文件web.config中做如下设置:
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    </modules>
  </system.webServer>
2.同样是配置web.config文件:
<system.webServer>
    <!--<modules runAllManagedModulesForAllRequests="true">
    </modules>-->
    <handlers>
      <add name="UrlRoutingHandler" type="System.Web.Routing.UrlRoutingHandler, System.Web" path="/promo/*" verb="*" />
    </handlers>
  </system.webServer>
两种方案任选其一即可解决此问题,希望对你有帮助,^_^ 参考网址: 1.http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx 2.http://stackoverflow.com/questions/16581184/mvc4-404-errors

转载请注明:图享网 » ASP.NET MVC4 URL路径中带点号出现404错误的解决方案

验证码