Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Override 415 response in ASP.Net Core

In ASP.net Core 2.1, I want to return a Json response along with Status code 415 instead of just 415 returned by default.

To achieve this I am using a resource filter:

public class MediaTypeResouceFilter : Attribute, IResourceFilter
{
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
        if (context.HttpContext.Response.StatusCode == 415)
        {
            context.Result = new ContentResult() { StatusCode = 415, Content = JsonConvert.SerializeObject(myResponse), ContentType = "application/json" };
        }
    }
}

In debugging, I see that context.Result is being overrided successfully but postman gets only 415 with no Json response.

In case I put:

context.Result = new ContentResult() { StatusCode = 415, Content = JsonConvert.SerializeObject(myResponse), ContentType = "application/json" };

inside OnResourceExecuting instead of OnResourceExecuted, it works as I wish but the thing is that I can't check for status code before executing resource.

Any ideas on why this is happening?

like image 728
Yahya Hussein Avatar asked Dec 11 '25 07:12

Yahya Hussein


1 Answers

can you try this?

public class MediaTypeResouceFilter : Attribute, IResourceFilter
    {
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
        }

        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            if (context.HttpContext.Response.StatusCode == 415)
            {
                var jsonString = JsonConvert.SerializeObject(new { data = "this is custom message" });
                byte[] data = Encoding.UTF8.GetBytes(jsonString);
                context.HttpContext.Response.Body.WriteAsync(data, 0, data.Length);
            }
        }
    }

Then you can get a 415 Status Code and body data is: {"data":"this is custom message"}

Actually OnResourceExecuted fires too late but you can modify the body for your custom message

like image 55
Khai Nguyen Avatar answered Dec 13 '25 19:12

Khai Nguyen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!