Set content when returning result in ExceptionFilterAttribute | The ASP.NET Forums

原文: Set content when returning result in ExceptionFilterAttribute | The ASP.NET Forums

  • Rena Ni Rena Ni

    Participant

    1910 Points

    641 Posts

    Re: Set content when returning result in ExceptionFilterAttribute

    Oct 08, 2019 07:53 AM|Rena Ni|LINK

    Hi b.dev,

    You could change your code like below:

    public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
    {
        public override void OnException(ExceptionContext context)
        {
                
            if (context.Exception is UnauthorizedAccessException)
            {
                var response = new HttpResponseMessage(HttpStatusCode.Unauthorized)
                {
                    Content = new StringContent("Authorization exception while accessing ST."),
                    ReasonPhrase = "User is not authorized. Please contact your administrator."
                };
                context.HttpContext.Features.Get<IHttpResponseFeature>().ReasonPhrase = "User is not authorized. Please contact your administrator.";
                context.Result = new HttpResponseMessageResult(response);
                base.OnException(context);
            }
        }      
    }
    public class HttpResponseMessageResult : IActionResult
    {
        private readonly HttpResponseMessage _responseMessage;
    
        public HttpResponseMessageResult(HttpResponseMessage responseMessage)
        {
            _responseMessage = responseMessage; // could add throw if null
        }
    
        public async Task ExecuteResultAsync(ActionContext context)
        {
            context.HttpContext.Response.StatusCode = (int)_responseMessage.StatusCode;
            using (var stream = await _responseMessage.Content.ReadAsStreamAsync())
            {
                await stream.CopyToAsync(context.HttpContext.Response.Body);
                await context.HttpContext.Response.Body.FlushAsync();
            }
        }
    }

    Result:

    Best Regards,

    Rena

    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue.
    If you have any compliments or complaints to MSDN Support, feel free to contact [email protected].
  • 猜你喜欢

    转载自www.cnblogs.com/lonelyxmas/p/12934685.html