ASP.NET MVC 5 - возвращать специальную страницу ошибок вместо пользовательской страницы ошибок - PullRequest
0 голосов
/ 17 октября 2018

Я не совсем уверен относительно названия моего вопроса.Мне нужно настроить пользовательские страницы ошибок для распространенных ошибок - 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" }
                        });
        }
    }
}

Я что-то упустил?

1 Ответ

0 голосов
/ 17 октября 2018

Я думаю, что этот блог может помочь вам.Он сделал это для меня несколько лет назад.

http://benfoster.io/blog/aspnet-mvc-custom-error-pages

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...