我不确定我的问题的标题。我需要为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" }
});
}
}
}
我想念什么吗?