对于我们的新应用程序,我们正在从 MVC 3 切换到 MVC 4。我们使用 Ajax 从服务器获取大部分内容在 MVC 3 中,我们在 web.config 中有以下内容:
<authentication mode="Forms">
<forms
defaultUrl="Home/Index"
protection ="All"
slidingExpiration="true"
/>
</authentication>
如果用户点击 [Authorize] 属性,则 ajax 调用将失败并出现“未经授权”错误。
$.getJSON(
url,function (data) {processAjaxCallResult(data);}
)
.fail(
function (xhr, status, error)
{ handleAjaxCallError(xhr, status, error); }
)
.done(
function () {completedAjaxCall();}
);
然后,“handleAjaxCallError”将拾取错误,并确保用户被引导到正确的 MVC 操作以登录
在具有相同 web.config 的新 MVC 4 中,应用程序尝试转到 login.aspx。这不是应用程序的一部分。将服务器重定向到这个不存在的页面会导致客户端停止使用内部服务器错误,从而破坏应用程序
如何找回我的“未经授权”错误?
更新
按照 Josh 的建议,我添加了对 HandleUnauthorizedRequest 的覆盖,如下所示:
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
if ((context.RequestContext.HttpContext.Request.Headers)["X-Requested-With"] ==
"XMLHttpRequest")
{
context.RequestContext.HttpContext.Response.StatusCode = 403;
}
}
这会导致“禁止”错误,我可以像在旧情况下处理 401 一样处理该错误。但是,设置 401仍会导致重定向到不存在的登录页面。
好吧,现在我让我的申请回到正轨,所以乔希是我的观点......