ASP.NET MVC Routing - 为路由添加.html扩展名

Dem*_*tic 16 c# asp.net-mvc-routing iis-7.5

我是MVC和路由的新手,我被要求修改应用程序以使用不同的URL.因为我没有经验,所以有点超过我的任务.

好吧,让我们谈一下代码:

routes.MapRoute(
"CategoryBySeName", // Route name
"products/{SeName}", // URL with parameters
new { controller = "Catalog", action = "CategoryBySeName" }
);
Run Code Online (Sandbox Code Playgroud)

这按预期工作,但客户端在路径的末尾想要".html",所以我改变了:

"products/{SeName}", // URL with parameters
Run Code Online (Sandbox Code Playgroud)

至:

"products/{SeName}.html", // URL with parameters
Run Code Online (Sandbox Code Playgroud)

失败(IIS 404页面 - MapRequestHandler)似乎iis正在尝试加载具有该名称的物理文件,而不是将其传递给应用程序.

类似:ASP.NET MVC路由从html页面开始(未回答,不重复)

Jos*_*eld 9

您猜测IIS处理程序可能在MVC可能正确之前抓取请求.

假设IIS 7:http: //technet.microsoft.com/en-us/library/cc770990(v = ws.10).aspx

您需要在IIS中编辑.html处理程序以使用ASP.NET.

您可以在II6的映射部分的app配置中的主目录选项卡下的网站属性中找到它.

(版本可能不同):C:\ windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll是处理.html文件所需的.

  • 对于需要在调试时在IIS Express中修复此问题的任何人,在系统托盘中找到IIS Express图标,"显示所有应用程序",选择您的应用程序并单击配置源的链接,然后为"\*"添加一行. html"镜像底部位置/ system.webServer/handlers节点中的所有"\*.cshtml"行. (5认同)
  • `<staticContent> <remove fileExtension =".html"/> </ staticContent>`将此添加到我的web.config中,问题仍然存在. (2认同)

Gyö*_*ssy 8

您必须通过ASP.NET管道强制所有请求,并且您可以通过仅将此单行添加到应用程序的web.config来执行此操作:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)