ASP.Net MVC HandleError выбрасывает 500 Внутренняя ошибка сервера - PullRequest
2 голосов
/ 10 декабря 2008

У меня на контроллере есть следующий фильтр HandleError:

[HandleError(ExceptionType = typeof(ArgumentException), View = "DestinationError")]

Я настроил Web.Config так, чтобы были включены customErrors. У меня проблема в том, что фильтр HandleError работает нормально, когда я запускаю приложение локально из Visual Studio, но при развертывании его на сервере все, что я получаю, это 500 Internal Server Error, указывающее, что представление Error не может быть найдено.

Кто-нибудь сталкивался с этим раньше, я подозреваю, что причиной проблемы может быть маршрутизация (хохо). Сайт развертывается в каталоге в корневом веб-каталоге, а не в самом wwwroot, поэтому, возможно, IIS не может найти файл ошибки.

Ответы [ 4 ]

3 голосов
/ 06 августа 2009

В противном случае вы можете использовать конфигурацию 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");
    }
}
3 голосов
/ 10 декабря 2008

Чтобы ответить на мой собственный вопрос, волшебство заключается в отключении ошибок HTTP в IIS. Я не рад этому обходному пути, поэтому, если у кого-то есть идеи получше, я бы хотел их услышать.

0 голосов
/ 08 декабря 2010

У меня была такая же проблема после перехода на MVC 3 RC. Удалось обойти это, добавив макет / мастер-страницу.

@inherits System.Web.Mvc.WebViewPage<System.Web.Mvc.HandleErrorInfo>

@{
    View.Title = "Error";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Теперь внутренняя ошибка сервера исчезла, но я думаю, что это где-то ошибка.

0 голосов
/ 05 августа 2009

Что если вы попробуете следующее?

Response.TrySkipIisCustomErrors = true;
...