Я использую 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 обработал эту ошибку:
Теперь мы открываем еще один тестовый URL с "/ Views / ..." в пути:
http://localhost/testmvc/Views/test.css
И мы видим, что ошибка была обработана ASP.NET:
Так что вопрос: может быть, есть какая-то настройка, чтобы сказать MVC не обрабатывать URL с "Views" в пути?