Я не совсем уверен относительно названия моего вопроса.Мне нужно настроить пользовательские страницы ошибок для распространенных ошибок - 404, 500 и т. Д., Но мне также нужны собственные «специальные» страницы ошибок для конкретных ошибок.
Я настроил пользовательские страницы ошибок, обслуживаемые IIS, какниже и работает нормально.Что-то происходит, возникает ошибка 500, подается /Error/InternalServerError
и сохраняется исходный URL.
Но если я получаю доступ к /Error/Special
, у меня проблема.Если я установлю код состояния 500, я получу содержимое страницы ошибки /Error/InternalServerError
вместо содержимого /Error/Special
с кодом состояния 500. TrySkipIisCustomErrors = true
не работает из-за web.config
.
У меня естьэто в моем web.config:
<httpErrors errorMode="Custom" existingResponse="Replace">
<clear/>
<error statusCode="500" path="/Error/InternalServerError" responseMode="ExecuteURL" />
</httpErrors>
И этот контроллер:
public class ErrorController : Controller
{
// special error page
public ActionResult Special()
{
//Response.StatusCode = (int)HttpStatusCode.InternalServerError; // <- I cant set status code because IIS returns error page (custom error page) instead
//Response.TrySkipIisCustomErrors = true; // <- needs httpErrors - existingResponse="Passthrough" but custom error pages are not working with it
return View();
}
public ActionResult InternalServerError()
{
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
return View();
}
}
Зачем мне нужны «специальные» страницы ошибок?Я хочу сделать что-то вроде этого:
public class SpecialController : Controller
{
public SpecialController()
{
// something
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if ( something != true )
{
// it would be nice to do it without redirect, just return /Error/Special and stop executing original request
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "Special" },
{ "controller", "Error" }
});
}
}
}
Я что-то упустил?