在 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 被成功覆盖,但邮递员只得到 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
触发得太晚,但您可以修改自定义消息的正文
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)