9

当其中包含某些文件扩展名时,我遇到路由不匹配的问题。我怀疑这可能是 IIS 问题,但我似乎无法找到它。

首先,我关闭了 RouteExistingFiles:

routes.RouteExistingFiles = false;

然后我有以下路线:

routes.MapRoute("", "category/{category}.aspx", new { controller = "Category", action = "View" });

并且以下 url 与此路由不匹配:

http://mysite/category/test.aspx

但是,如果我删除文件扩展名并将路由更改为:

routes.MapRoute("", "category/{category}", new { controller = "Category", action = "View" });

然后上面的 url 匹配 {category} 设置为“test.aspx”

这条路线我也有同样的问题:

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

奇怪的是,我对所有带有文件扩展名的路由都没有这个问题。以下路线似乎对我来说很好:

routes.MapRoute("", "favicon.ico", new { controller = "Resource", action = "Favicon" });
routes.MapRoute("", "min.css", new { controller = "Resource", action = "Css" });
routes.MapRoute("", "min.js", new { controller = "Resource", action = "JavaScript" });
routes.MapRoute("", "rsd.xml", new { controller = "MetaWeblog", action = "Rsd" });

.aspx 和 .xml 扩展名有什么我应该注意的吗?这可能是 IIS 问题吗?有没有比仅使用RouteDebugger更好的调试方法?

4

2 回答 2

3

如果 url 包含 .xml 或 .aspx,您的问题是不是将请求定向到这些操作?

那么我想这应该是真的,

routes.RouteExistingFiles = true;

更新:

对于在 IIS 7 中运行的站点,我使用以下路由在两种情况下进行了测试。

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

RouteExistingFiles是假的,

在这种情况下,当 sitemap.xml 文件存在时,请求被定向到该文件,否则请求被定向到操作。

RouteExistingFiles是真的,

当 sitemap.xml 文件存在或不存在时,请求被定向到操作。

于 2012-05-30T15:56:26.267 回答
0

我刚遇到这个问题。对我来说,没有为没有托管处理程序的文件调用路由。以下配置对我有用:

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>
于 2014-06-30T13:55:14.870 回答