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#代码语法