欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mvc 后缀 路由 伪静态

程序员文章站 2024-02-12 13:18:22
...

当对接第三方站长爬虫时,要求以.html结尾,项目是mvc4实现的,修改路由 

  routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}.html",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

访问报错404 ,

解决方案1:

于是网上找解决方法,不少页面推荐

 <modules runAllManagedModulesForAllRequests="true" />
解决方案2:
但是有人反对,
http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html
大意是说会造成资源的浪费,还会导致潜在的威胁(本人英文不好,仅能理解大概,详细请看原文)在原文中给出了解决方案:
<modules>
  <remove name="UrlRoutingModule-4.0" />
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>
经测试可行,
解决方案3:
http://www.cnblogs.com/TeyGao/archive/2012/06/01/2530743.html
这里提供了
<system.webServer>
    <modules runAllManagedModulesForAllRequests="false" />
    <handlers>
      <add name="HtmlFileHandler" path="*.html" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
  </system.webServer>

对需要静态化的Action上添加属性标签

[StaticFileWriteFilter]
public ActionResult Index(int ArticleId,int pageIndex)

当扩展不同的后缀时,  要 添加对应后缀 likepath="*.html"