mat*_*teo 25 rest json asp.net-mvc-2
我的MVC Web应用程序为两种类型的用户提供服务.
另外,
当用户访问应用程序时,如果他们未登录,则应用程序应以不同的方式做出反应.
我习惯使用WCF REST服务,我可以在这里引发这样的异常:
throw new WebProtocolException(System.Net.HttpStatusCode.Unauthorized, exc.Message, exc);
Run Code Online (Sandbox Code Playgroud)
并收到401消息.我把statusCode这样的问题用在MVC中的相同方法的问题:
HttpContext.Response.StatusCode = (Int32)HttpStatusCode.Unauthorized
Run Code Online (Sandbox Code Playgroud)
它总是重定向到LogIn页面.
我怎样才能做到这一点?
我已经尝试重写AuthorizeAttribute并处理该OnAuthorization函数,但是一旦我将其设置statusCode为401,它就会被重定向到LogIn页面.
Kam*_*him 27
要防止登录页面重定向,必须将SuppressFormsAuthenticationRedirectproperty 设置HttpContext.Response为true;
HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
Run Code Online (Sandbox Code Playgroud)
您遇到的是 ASP.NET MVC 中的一个漏洞(我希望他们有一天能修复)。
ASP.NET 的标准操作模型是,如果检测到 401 Http 状态代码,那么正如您所经历的那样,它会自动重定向到登录页面,即使您通过 Ajax 调用进入,也会发生这种情况。不幸的是我还没有找到任何方法来改变这种行为。
相反,我所做的是返回一个替代的、未使用的 Http 状态代码,我可以在客户端中检测到该代码并以适当的方式进行处理。
因此,在我的身份验证过滤器中,如果它是 Ajax 请求,我将返回 449,否则返回标准 401。然后在客户端上,我可以检查 XMLHttpRequest.status,并在检测到 449 时采取适当的操作。
| 归档时间: |
|
| 查看次数: |
9230 次 |
| 最近记录: |