ASP.Net MVC HandleError выбрасывает 500 Внутренняя ошибка сервера
У меня есть следующий фильтр HandleError на моем контроллере:
[HandleError (ExceptionType = typeof (ArgumentException), View = "DestinationError")]
Я настроил Web.Config так, чтобы были включены customErrors. У меня проблема в том, что фильтр HandleError работает нормально, когда я запускаю приложение локально из Visual Studio, но при развертывании его на сервере все, что я получаю, это 500 Internal Server Error, указывающее, что представление Error не может быть найденный.
Кто-нибудь сталкивался с этим раньше, я подозреваю, что причиной проблемы может быть маршрутизация (хохо). Сайт развертывается в каталоге в корневом веб-каталоге, а не в самом wwwroot, поэтому, возможно, IIS не сможет найти файл ошибок.
4 ответа
Чтобы ответить на мой собственный вопрос, магия заключается в отключении ошибок HTTP в IIS. Я не рад этому обходному пути, поэтому, если у кого-то есть идеи получше, я бы хотел их услышать.
В противном случае вы можете использовать конфигурацию Web.Config и установить для нее ожидаемые действия контроллера. Как это:
<customErrors mode="On" defaultRedirect="/Error">
<error statusCode="404" redirect="/Error/NotFound"/>
</customErrors>
Затем представьте, что у вас есть контроллер ошибок (/Error), который указывает на действие индекса
public class ErrorController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index()
{
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
return View("Index");
}
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult NotFound()
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
return View("NotFound");
}
}
Что делать, если вы попробуете следующее?
Response.TrySkipIisCustomErrors = true;
У меня была такая же проблема после перехода на MVC 3 RC. Удалось обойти это, добавив макет / мастер-страницу.
@inherits System.Web.Mvc.WebViewPage<System.Web.Mvc.HandleErrorInfo>
@{
View.Title = "Error";
Layout = "~/Views/Shared/_Layout.cshtml";
}
Теперь внутренняя ошибка сервера исчезла, но я думаю, что это где-то ошибка.