【问题标题】:OWIN OAuthAuthorizationServerProvider custom error responseOWIN OAuthAuthorizationServerProvider 自定义错误响应
【发布时间】:2016-09-23 03:01:17
【问题描述】:

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

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

但是,我无法发送响应。它要么在 25 字符处被截断(??),要么作为转义的 C# string"\"lockout": 2" 等)发送。

这是我迄今为止尝试过的:

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

【问题讨论】:

  • 您是否设置了Response.ContentLength 属性?
  • 是的尝试过,但似乎将其设置回 25
  • 我相信 OAuth 提供者只是覆盖了您的响应(在这种情况下,它附加到同一个流,但覆盖了 ContentLength 标头)。看看这个答案,或许能帮你找到解决办法(问题是一样的):stackoverflow.com/a/36755639/3670737

标签: c# json oauth owin


【解决方案1】:

通过将内容长度存储在请求上下文中来解决它(临时)。

context.Request.Set("Content-Length", json.Length.ToString());

然后在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;  
}  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-07
    • 2017-03-13
    • 2014-11-25
    • 2014-09-22
    • 2012-05-22
    • 1970-01-01
    • 2014-12-01
    • 2018-11-13
    相关资源
    最近更新 更多