asp.net-mvc - 带有文件扩展名的 ASP.NET MVC 路由不再在生产中工作

标签 asp.net-mvc iis azure asp.net-mvc-routing

我有一个在 Azure 上运行的 ASP.NET MVC 4 应用程序。我有一些类似于文件名的自定义路由(即“favicon.ico”)。这些类似文件名的路由在过去两年中运行良好,没有出现任何问题。但是,当我从 Azure SDK 1.7 升级到 1.8 时,这些类似文件名的路由停止工作。

它在带有 IIS Express 的本地调试环境中工作正常,因此它似乎不是 web.config 文件或 RouteCollection 问题。

我们将“runAllManagedModulesForAllRequests”设置为“true”并且“RouteTable.Routes.RouteExistingFiles = true”。此外,这些类似文件的路由不存在于磁盘上。

我检查了升级前和升级后计算机上的失败请求跟踪日志。它们看起来很相似,只是工作的升级前部署有一个从“StaticFile”到“System.Web.Mvc.MvcHandler”的 FREB“HANDLER_CHANGED”事件,而错误的升级后部署则永远不会发生(它与“StaticFile”保持一致) "handler) 并最终发送 404。

因此,如果 UrlRoutingModule 具有扩展名并因此不提供 MvcHandler,则它似乎不再正确解析路由。然而,所有非扩展路由都工作正常(即“some/test”),因此 IIS 现在似乎以某种方式阻止了具有扩展名的路由的解析,即使在 FREB 日志中我看到“NOTIFY_MODULE_START” “UrlRoutingModule-4.0”模块。

我错过了一些基本的东西吗?接下来我该看哪里?

更新:将我们的 ServiceConfiguration.Cloud.cscfg 升级到“osFamily”3 (Windows Server 2012) 以及 IIS 8 也可以解决这个问题。我不确定发生了什么,但很高兴它不再存在。我很乐意听到有关进一步调试见解的评论或其他答案,这些见解在此类情况下可能会有所帮助,因为 FREB 并没有我希望的那么有用。

最佳答案

刚刚查看了我们的配置和服务器。我们切换到 Server 2012,并更新到 SDK 1.8。我们使用 Server2012-> osFamily="3"osVersion="*"schemaVersion="2012-10.1.8"并毫无问题地提供动态 XML(即 sitemap.xml):

  • “runAllManagedModulesForAllRequests”设置为“true”
  • 我们指定 RouteTable.Routes.RouteExistingFiles

路由配置如下:

routes.MapRoute(
    "sitemap.xml",
    "sitemap.xml",
    new { controller = "Sitemap", action = "sitemap.xml" }
);

并且 Action 方法装饰有:

[ActionName("sitemap.xml")]

关于asp.net-mvc - 带有文件扩展名的 ASP.NET MVC 路由不再在生产中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347711/

相关文章:

asp.net - 压缩不起作用

iis - 如何查看 IIS 服务器的跟踪日志?

c# - 替换 Azure 逻辑应用中的字符串

azure - az devops login 无法使用 key 环存储 PAT;回退到文件存储

c# - MVC "UrlData[0]"

asp.net-mvc - ASP.NET MVC 中的 ActionFilter 或 RenderAction?

asp.net-mvc - 使用下拉列表在 mvc 3 中导航

c# - asp.net SERVER_NAME 返回错误的域名

c# - MVC 正则表达式不允许空格和特殊字符

iphone - 在应用程序(全屏)模式下使用 iPhone HTML5 进行 Azure 移动 Facebook 身份验证