我在我的应用程序中使用 ASP.NET MVC。
用户可以通过将它们包含在页面上来指定自己的图像、样式、脚本。
但是当他们指定不存在的文件的 URL 时,路由机制会尝试通过 URL 查找控制器和操作到图像或样式等。
我添加了一个方法 IgnoreRoute 并在那里指定了我不想通过路由处理的所有扩展。
它可以正常工作,直到 URL 不以“Views/...”开头。
在这种情况下,URL 传递到应用程序并在应用程序内部执行错误 404。
但我想用 IIS 处理这个错误。
这可以用空项目进行测试。您可以简单地将此代码用于 Global.asax.cs 文件:
using System;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute(
"{*staticfile}",
new { staticfile = @".*\.(jpg|gif|jpeg|png|js|css|htm|html|htc)$" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
void Application_Error(object sender, EventArgs e)
{
}
}
}
现在我们需要在 IIS 上托管这个应用程序,例如在http://localhost/testmvc/
您可以在 Application_Error 方法内放置一个断点,以查看错误何时在应用程序内执行
所以现在打开测试 URL:
http://localhost/testmvc/test.css
我们可以看到 IIS 处理了这个错误:
现在我们在路径中打开另一个带有“/Views/...”的测试 URL:
http://localhost/testmvc/Views/test.css
我们看到错误已由 ASP.NET 处理:
所以问题是:也许存在一些设置来告诉 MVC 不处理路径中带有“视图”的 URL?