我正在处理用ASP.NET MVC5编写的应用程序,该应用程序要求用户登录。该身份验证适用于中央身份验证服务(CAS)。在主页上,我有几个部分观点:
当我想更新用户的数据时,我会调用控制器的动作。
它运作良好,直到CAS会话到期。如果我尝试刷新部分视图,我会收到错误:
“选项https://example.com/CAS/Authentication 403(禁止)”
“无法加载https://example.com/CAS/Authentication:预检的响应包含无效的HTTP状态代码403”
我认为它来自使用Ajax刷新部分视图,它返回登录页面,该页面不在同一个域中。我该如何克服这个问题?
在我的视图中,我使用Ajax.BeginForm()
将数据发送到Controller,我的控制器返回部分视图,这样我就不需要完全刷新页面了。
答案 0 :(得分:0)
为了克服Cross Origin Request错误,我需要处理Ajax响应。我没有在局部视图中返回登录页面,而是在OnComplete事件上调用Javascript函数,检查响应的状态代码。
在我的部分观点中:
AjaxOptions ajaxOptions = new AjaxOptions
{
HttpMethod = "POST",
OnComplete = "redirectToLoginPage"
};
using (Ajax.BeginForm("ActionName", "ControllerName", null, ajaxOptions))
{
<button type="submit">Submit</button>
}
单击“提交”,它将从控制器“ControllerName”执行操作“ActionName”。然后,它将触发Javascript函数“redirectToLoginPage”,即:
function redirectToLoginPage(xhr) {
if (xhr.status == 200) {
//Whatever
}
else
{
window.location.replace("https://login.example/");
}
}
这就是诀窍。