Как получить код состояния http в пользовательском HandleErrorAttribute - PullRequest
0 голосов
/ 04 марта 2019

Я использую пользовательский атрибут HandleErrorAttribute, который применяется глобально путем регистрации в фильтрах.Проблема в том, что я не могу поймать правильный код ошибки http.Каждый раз это 200 код внутри этого атрибута.

public class HandleAndLogErrorAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)
            return;
        var statusCode = filterContext.HttpContext.Response.StatusCode; //always 200
        LogManager.Error(filterContext.Exception);

        filterContext.Result = CreateActionResult(filterContext, statusCode);
        filterContext.ExceptionHandled = true;
        filterContext.HttpContext.Response.Clear();
        filterContext.HttpContext.Response.StatusCode = statusCode;
        //filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
    }

    protected virtual ActionResult CreateActionResult(ExceptionContext filterContext, int statusCode)
    {
        var ctx = new ControllerContext(filterContext.RequestContext, filterContext.Controller);
        var statusCodeName = ((HttpStatusCode)statusCode).ToString();
        var viewName = "~/Views/Shared/Error.cshtml";
        var controllerName = (string)filterContext.RouteData.Values["controller"];
        var actionName = (string)filterContext.RouteData.Values["action"];
        var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);
        var result = new ViewResult
        {
            ViewName = viewName,
            ViewData = new ViewDataDictionary<HandleErrorInfo>(model),
        };
        result.ViewBag.StatusCode = statusCode;
        return result;
    }
}

1 Ответ

0 голосов
/ 04 марта 2019

Просматривая исходный код для HandleErrorAttribute.cs , похоже, вы можете получить код состояния, используя приведенный ниже код

var statusCode = new HttpException(null, filterContext.Exception).GetHttpCode();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...