我必须使用一个身份验证库来帮助完成
之类的操作Response.Redirect(url, false);
在它的方法调用中。我不能改变这个库代码,它适用于MVC风格的应用程序,但在角度SPA - > WebApi应用程序这很糟糕。
我真的需要一个401,否则当我的角度脚本使用$ http尝试调用另一个域上的auth服务器来响应302时,我会遇到CORS问题,如果它甚至可以作为{{ 1}}也会向下发送Response.Redirect
html,尖括号会导致错误抛出。
由于我必须首先调用auth库,object moved
已经在响应管道中,所以我需要清理它以删除正文内容并将302转换为401.我想我可以:
Response.Redirect
但这只是附加到响应并且不替换它,而且我还需要Location:标头,我似乎无法通过WebApi方法访问它。
所以我必须在我的ApiController中执行此操作:
return new HttpWebResponse(StatusCode.UnAuthorized){
Content = new StringContent("data");
}
但这似乎很糟糕,与webapi“感觉”相反。另外,我这样做与控制器联系在一起。例如,我无法在MessageHandler中获取包装器。
我想要做的是监视消息处理程序或AuthorizationFilterAttribute中给定路由的响应,如果它是302,我想读取它的标题,取我想要的,擦除它并替换它我自己作为401的“新鲜”回应。我怎么能这样做?
答案 0 :(得分:0)
您可能想要编写自己的ActionFilter并覆盖其 OnActionExecuted 方法,您可以访问 HttpActionExecutedContext 。从那里,您可以检查响应代码,例如,并用您想要的任何内容覆盖响应。