我们正在将一个ASP.NET项目从IIS6(Win Server 2003)移动到IIS 8.5(Win Server 2012 R2)。该项目有一些MVC组件,使用以下路由。
routes.MapRoute("simple", "{controller}.mvc/{action}/{id}");
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}"
new { controller = "Home", action = "Index", id = "" }
);
因此,MyDemo.mvc
将访问对MyDemoController
的调用
现在发生了什么,当我使用url作为MyDemo.mvc /它工作时,但当我使用没有斜线的MyDemo.mvc时,它会抛出404错误。
仅在部署的服务器中发生这种情况。在使用IIS7.5的本地计算机中,Win 7可以正常运行。
手动更改是不可能的,因为站点地图文件中添加了大量网址,而我们的客户端不批准该方法。
它是特定于IIS版本的东西,还是任何小的调整都可以解决问题?
答案 0 :(得分:2)
看看以下内容。我相信这是你的问题。它与.mvc
扩展名有关。
ASP.NET MVC - Routing - an action with file extension
Dots in URL causes 404 with ASP.NET mvc and IIS
问题是IIS会将.mvc文件作为静态文件处理 默认情况下不会通过MVC路由假设的.mvc文件 应用。 IIS处理请求,您的MVC代码永远不会得到 更改为路由到此文件。
总之,这里的配置是什么使.mvc
文件工作:
<system.webServer>
<handlers>
<add name="MVCFileHandler"
path="*.mvc"
verb="GET" type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
</handlers>
</system.webServer>
至于它在IIS7.5上工作,Win 7没有任何问题,而不是IIS 8.5。
看一下这个答案
Routing a url with extension in MVC4 won't work, tries to serve up static file
还有
<modules runAllManagedModulesForAllRequests="true">
但是 它似乎不适用于MVC4 / IIS8(以前在MVC3 / IIS7中没问题) IIRC)。更多信息 here。 每个请求都会对此产生性能影响 通过管理的管道路线。
希望这一切都有帮助