Forms身份验证如何遇到401不跳转。
Forms身份验证中 普通的请求 GET之类的 ,当后台返回是401时会自动跳转到登陆页面。
那么我如果是ajax请求它也会给我跳转,我想问下 如何能让 ajax请求不自动跳转页面啊 。
直接返给给客户端401就行。
6回答
-
开心每一天1111
貌似用默认的forms认证方式,验证不通过肯定会自动跳转的。要实现你的功能,需要研究一下forms认证方式是在哪里跳转的,想法子在跳转前面拦截掉然后使用你自己的响应方式,或者参考该模块,使用自己的认证模块,大部分使用forms认证模块实现,跳转的部分自己来做。
-
呼唤远方
Forms验证的重定向是必然发生的。
-
绝地无双
我现在就要阻止它发生 。我想能不能通过自己给他写跳转那块 还是能不能通过配置来不让他跳转。
-
吃鸡游戏
@Rainr: 我写了个不太好的实现,通过将 401 响应修改为 403 来禁止重定向,在你的所有 Controller 中重载 ExecuteCore 方法,如下:
protected override void ExecuteCore()
{
if (!base.ControllerContext.IsChildAction)
{
base.TempData.Load(base.ControllerContext, this.TempDataProvider);
}
try
{
string requiredString = this.RouteData.GetRequiredString("action");
if (!this.ActionInvoker.InvokeAction(base.ControllerContext, requiredString))
{
this.HandleUnknownAction(requiredString);
}
if (base.HttpContext.Response.StatusCode == 401)
base.HttpContext.Response.StatusCode = 403;
}
finally
{
if (!base.ControllerContext.IsChildAction)
{
base.TempData.Save(base.ControllerContext, this.TempDataProvider);
}
}
}
如果是 401 的话,请求处理器会自动重定向,目前我还没想到如何从请求处理器来修改的方法。上面的方法你可以临时使用。
-
跃然一笑
@Launcher: 这个问题我查了好久 好像还是没办法阻止它转发。 谢谢你的回答。
-
弑天下
ajax返回的有状态编号,做个判断就行了。