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

Posted

技术标签:

【中文标题】ASP.NET C# SuppressFormsAuthenticationRedirect 不适用于 Ajax POST?【英文标题】:ASP.NET C# SuppressFormsAuthenticationRedirect not working for Ajax POST? 【发布时间】:2015-02-07 13:06:28 【问题描述】:

我正在通过 ajax POST 在装饰有 custom[ApplicationAuthorize] 的控制器中调用一个操作,并且我希望能够处理用户未通过 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 中的操作。

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

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

【问题讨论】:

嘿,如果您找到任何解决方案,请分享 【参考方案1】:

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

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

【讨论】:

好的,它必须在基本方法中执行它并且硬中断请求管道的其余部分。不确定是否有办法覆盖默认行为。您可以创建自己的并避免使用基类。 我尝试注释掉基类调用,得到相同的结果。我相信问题的问题是稍后在请求管道中,因为它由使用 OnLeave 事件处理程序订阅 EndRequest 事件的 FormsAuthentificationModule 修改。我在问题中添加了一篇文章,以进一步了解请求/响应管道。 这不是工作伙伴!你发帖前检查过吗?

以上是关于ASP.NET C# SuppressFormsAuthenticationRedirect 不适用于 Ajax POST?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Razor——ASP.NET Razor - C#代码语法

如何从asp.net中的js函数调用c#函数?

[C#][ASP.NET] 网站同时使用 C# 与 VB.NET

ASP.NET(c#)生成条形码

有哪位高手知道ASP.NET中用C#怎样怎样实现文件上传

如何在asp.net c# web应用程序中使用asp.net vb页面