在 ASP.net Core 2.1 中,我想返回一个 Json 响应以及状态代码 415,而不是默认返回的 415。
为此,我使用资源过滤器:
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" };
}
}
}
在调试中,我看到 context.Result 被成功覆盖,但 postman 仅获得 415,没有 Json 响应。
如果我输入:
context.Result = new ContentResult() { StatusCode = 415, Content = JsonConvert.SerializeObject(myResponse), ContentType = "application/json" };
在 OnResourceExecuting 而不是 OnResourceExecuted 中,它按我希望的方式工作,但问题是我无法在执行资源之前检查状态代码。
关于为什么会发生这种情况有什么想法吗?
最佳答案
你能试试这个吗?
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);
}
}
}
然后你可以得到一个 415 状态码,正文数据是:{"data":"this is custom message"}
实际上 OnResourceExecuted
触发得太晚了,但您可以修改自定义消息的正文
关于c# - 覆盖 ASP.Net Core 中的 415 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53166761/