gpt4 book ai didi

c# - ASP.NET C# SuppressFormsAuthenticationRedirect 不适用于 Ajax POST?

转载 作者:行者123 更新时间:2023-11-30 18:27:04 24 4
gpt4 key购买 nike

我正在通过 ajax POST 在装饰有自定义 [ApplicationAuthorize] 的 Controller 中调用一个操作,我希望能够处理用户未通过 ajax 响应进行身份验证的情况让 ASP.NET 重定向到登录页面。

我试过了 this ;不会工作。我仍然收到 302。我还尝试在覆盖自定义授权属性的 HandleUnauthenticatedRequest 函数时将 SuppressFormsAuthentificationRedirect 属性设置为 true,但仍然无法正常工作。

自定义授权属性:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,
AllowMultiple = false, Inherited = true)]
public class ApplicationAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);

var httpContext = filterContext.HttpContext;
var request = httpContext.Request;
var response = httpContext.Response;
var user = httpContext.User;

if (request.IsAjaxRequest())
{
if (user.Identity.IsAuthenticated == false)
response.StatusCode = (int)HttpStatusCode.Unauthorized;
else
response.StatusCode = (int)HttpStatusCode.Forbidden;

response.SuppressFormsAuthenticationRedirect = true;
response.End();
}
}
}

当 Application_EndRequest 发生时,我在 Global.asax 中设置了一个有效的解决方案,将状态为 302 的所有响应更改为 401,但这是暂时的,而不是我想要的行为,因为有时重定向是合法的。

即使使用 this 中描述的自定义授权属性,这也是我的响应.SaveAnswer 是由 Ajax POST 调用的 SurveyController 中的操作。 Ajax POST Response

要进一步了解此问题的请求/响应管道,请参阅 this article.

有什么想法吗?我已经为这个问题苦苦挣扎了几个小时......

最佳答案

切换调用基类的顺序。我敢打赌这就是覆盖您的回复的原因。

base.HandleUnauthorizedRequest(filterContext);
// The rest of your code

关于c# - ASP.NET C# SuppressFormsAuthenticationRedirect 不适用于 Ajax POST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27382349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com