C# OWIN OAuthAuthorizationServerProvider自定义错误响应

C# OWIN OAuthAuthorizationServerProvider自定义错误响应,c#,json,oauth,owin,C#,Json,Oauth,Owin,对于当前的WebAPI,我使用了OAuthAuthorizationServerProvider的自定义实现 如果登录失败,我需要返回JSON响应。此响应是一个简单的ViewModel,包含锁定时间等(如果有) 但是,我无法发送回复。它要么在25个字符(?)处被截断,要么作为转义的C#字符串发送(“\”locket“:2”等) 这就是我迄今为止所尝试的: context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; context

对于当前的WebAPI,我使用了
OAuthAuthorizationServerProvider
的自定义实现

如果登录失败,我需要返回JSON响应。此响应是一个简单的
ViewModel
,包含锁定时间等(如果有)

但是,我无法发送回复。它要么在
25个字符(?)处被截断,要么作为转义的C#
字符串发送(
“\”locket“:2”
等)

这就是我迄今为止所尝试的:

context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
context.Response.ContentType = "application/json; charset=utf-8";
context.Response.Write(JsonConvert.SerializeObject(authResult));

通过在请求上下文中存储内容长度(临时)解决了此问题

然后在Startup.cs中获取它

if (c.Request.Environment.ContainsKey("Content-Length"))
{
    c.Response.ContentLength = Convert.ToInt64(c.Request.Environment["Content-Length"]);
    c.Response.ContentType = "application/json; charset=utf-8";
    c.Response.StatusCode = (int)HttpStatusCode.Unauthorized;  
}  

您是否设置了
Response.ContentLength
属性?是的,尝试了,但是似乎将其设置回了25。我相信OAuth提供程序只是覆盖了您的响应(在这种情况下,是附加到同一流,但覆盖了ContentLength头)。看看这个答案,它可能会帮助您找到解决方案(问题是相同的):
if (c.Request.Environment.ContainsKey("Content-Length"))
{
    c.Response.ContentLength = Convert.ToInt64(c.Request.Environment["Content-Length"]);
    c.Response.ContentType = "application/json; charset=utf-8";
    c.Response.StatusCode = (int)HttpStatusCode.Unauthorized;  
}