может ли IIS действительно знать, является ли запрос в asp.net MVC 404, потому что он может или не может быть отображен через любой маршрут?
Я думаю, все зависит от того, какфабрика вашего контроллера обрабатывает неотвеченный запрос.Кажется, фабрика DefaultController генерирует исключение HttpException с кодом 404, когда не может найти маршрут и позволяет IIS обрабатывать отображение ошибок.Вы можете поиграть с этим и увидеть его в действии, создав собственную фабрику контроллеров.
Например, добавьте следующую строку в ваш Application_Start
ControllerBuilder.Current.SetControllerFactory(new TestControllerFactory());
и добавьте этот класс в совершенно новыйПроект MVC:
public class TestControllerFactory : DefaultControllerFactory
{
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
//throw new Exception("Oops!"); // yellow screen of death
throw new System.Web.HttpException(404, "Oops not found!"); // bubbles up to IIS
}
return base.GetControllerInstance(requestContext, controllerType);
}
}
Перейдите к своему проекту на http://localhost/MvcApplication1/unmapped и посмотрите, что происходит, когда вы генерируете HttpException с кодом 404 по сравнению с тем, когда вы бросаете обычное исключение (или даже HttpException с кодомкроме 404)
Убедитесь, что ваш проект работает под управлением IIS (а не VS Dev Server), поскольку они обрабатывают эти вещи по-разному.