【问题标题】:URL Pattern Routing MVC 3URL 模式路由 MVC 3
【发布时间】:2013-08-09 13:25:16
【问题描述】:

我想知道如何在 asp.net MVC 的 url 中有这样的东西

/Article/12.20.2013

我在下面尝试过,它适用于 /Article/12-20-2013,但不适用于 /Article/12.20.2013。我在 Global.asax 下面有

routes.MapPageRoute("Blog",
    "/Article/{entryDate}",
    new {controller = "Article", action = "Entry")};

我也尝试过类似下面的方法

routes.MapPageRoute("Blog",
    "/Article/{month}.{Date}.{year}",
    new {controller = "Article", action = "Entry")};

但没有运气..

请用一些示例指导我。

【问题讨论】:

  • 你有没有可能在 IIS6 上?
  • 您应该考虑使用第一个模式 /Article/12-20-2013 作为您的路线,因为不建议设置 RunAllManagedModulesForAllRequests="true",因为它会通过运行 .html 等静态文件的请求来增加额外的开销和 .jpeg 通过 ASP.NET 管道。见ASP.NET Routing
  • +1 我不知道。很高兴再次感谢安东尼

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

我认为问题在于 IIS 可能将“.2013”​​视为文件扩展名并试图为其查找处理程序。我们需要做的是让 MVC 处理所有请求。

如果您使用的是 IIS 6,则需要将通配符映射到 aspnet_isapi.dll。如果您使用的是 IIS 7,则可以设置 runAllManagedModulesForAllRequests="true":

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    </modules>
</system.webServer> 

【讨论】:

  • +1 为答案。你能告诉我这是否可以针对特定的控制器视图完成吗?
【解决方案2】:

您需要更改 web.config 以强制以 Article 开头的每个 url 都被视为 MVC url

<system.webServer>    
  <handlers>      
    <add name="UrlRoutingHandler" 
         type="System.Web.Routing.UrlRoutingHandler, 
               System.Web, Version=4.0.0.0, 
               Culture=neutral, 
               PublicKeyToken=b03f5f7f11d50a3a" 
         path="/Article/*" 
         verb="GET"/>      
  </handlers>
</system.webServer>

那么你的路由应该可以正常工作了。

【讨论】:

  • 已经这样做了,但是每当我尝试 /Article/12.20.2013 时它都会失败,因为 /Article/12-20-2013 工作正常
猜你喜欢
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
相关资源
最近更新 更多