视图组件中的异常未被自定义异常过滤器捕获

时间:2019-02-12 11:33:36

标签: c# asp.net core exceptionfilterattribute

InvokeAsync()方法已成功使用SecureSuccessStatusCode()引发异常,尽管它没有被我的自定义Exception过滤器捕获。

附带的代码。任何帮助将不胜感激

[MyExceptionFilter()]
public async Task<IViewComponentResult> InvokeAsync()
    {
        HttpResponseMessage responseMessage = new HttpResponseMessage();
        string responseContent = string.Empty;
        List<SystemMenus> systemMenu = new List<SystemMenus>();

            using (CommonUtility commonUtility = new CommonUtility())
            {
                using (var client = commonUtility.getHttpClient(WebClientContentType.JSON,GetUserTokenId()))
                {
                    string systemMenuId = HttpContext.Request.Headers["systemMenuId"];
                    responseMessage =await client.GetAsync(new Uri(commonUtility.GetWebApiUrl() + "/api/Auth/GetSubMenuByMenuId?systemMenuId=" + systemMenuId));
                    responseContent = await responseMessage.Content.ReadAsStringAsync();
                    responseMessage.EnsureSuccessStatusCode();
                    systemMenu = (List<SystemMenus>)JsonConvert.DeserializeObject(responseContent, typeof(List<SystemMenus>));                  
                }
            }


        return await Task.FromResult((IViewComponentResult)View("_SubMenu", systemMenu));
    }

在我的异常过滤器中,

公共类MyExceptionFilter:ExceptionFilterAttribute     {         #region声明

    Logger logger;
    #endregion

    #region Constructor
    public MyExceptionFilter ()
    {
        logger = ConfigUtility.getNlogConfig();
    }
    #endregion

    #region Public/Private Methods

    public override void OnException(ExceptionContext exContext)
    {
        string strStatusCode = string.Empty;


        if (exContext.Exception.GetType() == typeof(HttpRequestException))
        {
            HttpRequestException exception = (HttpRequestException)exContext.Exception;
            strStatusCode = exception.Message;
        }

        exContext.Result = new RedirectToActionResult("Error", "Error", new { statusCode = strStatusCode });
        return;
    }//end method

0 个答案:

没有答案