Я настроил пользовательские ошибки для своего сайта, как показано ниже в файле Web.config:
<system.web>
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error/Error400">
<error statusCode="400" redirect="~/Error/Error404"/>
<error statusCode="404" redirect="~/Error/Error404" />
<error statusCode="403" redirect="~/Error/Error403" />
<error statusCode="500" redirect="~/Error/Error500" />
</customErrors>
</system.web>
А также
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="400" />
<error statusCode="400" path="/Error/Error400" responseMode="ExecuteURL" />
<remove statusCode="403" />
<error statusCode="403" path="/Error/Error403" responseMode="ExecuteURL" />
<remove statusCode="404" />
<error statusCode="404" path="/Error/Error404" responseMode="ExecuteURL" />
<remove statusCode="500" />
<error statusCode="500" path="/Error/Error500" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
Я выбрасываю такие ошибки из своих контроллеров:
throw new HttpException((int)HttpStatusCode.BadRequest, "The checklist Id is not specified. EntityId: " + this.LoggedInEntity.EntityId + "; userId: " + this.LoggedInUser.UserId);
Контроллер ошибок, который обрабатывает запросы пользовательских страниц ошибок:
public class ErrorController : Controller
{
public ActionResult Error400()
{
ErrorViewModel error = new ErrorViewModel();
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return View(error);
}
public ActionResult Error403()
{
ErrorViewModel error = new ErrorViewModel();
Response.StatusCode = (int)HttpStatusCode.Forbidden;
return View(error);
}
public ActionResult Error404()
{
ErrorViewModel error = new ErrorViewModel();
Response.StatusCode = (int)HttpStatusCode.NotFound;
return View(error);
}
public ActionResult Error500()
{
ErrorViewModel error = new ErrorViewModel();
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
return View(error);
}
}
Однако в примере выброшенного исключения, которое является ошибкой 400, действие 400 не вызывается. Вместо этого вызывается действие 500. Как я могу заставить его вызывать правильное действие 400 вместо выброшенной ошибки?
Я использую ELMAH для регистрации ошибок, и он показывает правильный код ошибки:
system.web
страницы ошибок установлены наredirect="..."
. - person Dai   schedule 20.02.2015