когда я вручную установил HTTP Status
моего потока ответов, скажем, 404
или 503
, IIS отображает стандартное содержимое / представление IIS вместо моего настраиваемого представления.
Когда я делаю это с сервером веб-разработки (AKA. Кассини), он работает правильно (то есть мой контент отображается и response.statuscode
== мои введенные данные).
Есть ли способ изменить такое поведение?
Сделайте веб-приложение ASP.NET MVC1 по умолчанию. Добавьте следующий маршрут
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{*catchall}",
new { controller = "Home", action = "Index" }
);
}
Теперь замените метод индекса HomeController на ...
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
Response.StatusCode = 404;
return View();
}
}
Хорошо - нашел ответ. Как я и ожидал, IIS перехватывает мои ответы, отличные от 200. Не уверен (т.е. я не уверен, что это поведение по умолчанию, ИЛИ это из-за настройки одного из членов группы, обновленного в конфигурации машины и т. Д.).
В любом случае, ключ здесь - сказать IIS, не обрабатывать любые ресурсы результата состояния, отличные от 200.
Как? Запись конфигурации в web.config.
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="PassThrough"/>
.... snipped other IIS relevant elements ...
</system.webServer>
Теперь ключ здесь existingResponse="PassThrough"
. Этот плохой мальчик говорит IIS оставить мои ресурсы в покое, если код состояния HTTP! = 200.
Хотите больше информации? Конечно: Подробнее об этом элементе на официальном веб-сайте IIS.
Другой способ обойти это - запустить следующий код в вашем приложении ASP:
Response.TrySkipIisCustomErrors = true;
Будьте осторожны с таким подходом в целом. Вы НЕ должны отображать представление о статусе 404.
Я думаю, что когда возвращается код состояния ошибки, IIS возвращает страницу ошибки состояния, которая зарегистрирована с ним, а не результат обработки. Итак, вы можете поместить туда HTML-страницу (или ссылку на aspx-страницу). http://professionalaspnet.com/archive/2008/02/13/Enforcing-a-Custom-404-Page-in-ASP.NET.aspx есть хорошее объяснение, как создать страницу с ошибкой.
Но это неважно. Многие браузеры по умолчанию НЕ показывают этот вывод, а показывают что-то, установленное в браузере. Итак, если вы полагаетесь на людей, которые видят вашу страницу 404 - этого может и не произойти. Они могут увидеть страницу 404, настроенную для них в браузере.