尝试从局部视图重定向用户时出现 CORS 错误

CORS error when trying to redirect user from a partial view

我正在开发一个用 ASP.NET MVC5 编写的应用程序,它要求用户登录。身份验证与中央身份验证服务 (CAS) 一起工作。在主页上,我有几个局部视图:

Home page with partial views

当我想更新用户数据时调用控制器的动作。

它运行良好,直到 CAS 会话过期。如果我尝试刷新局部视图,则会出现错误:

"OPTIONS https://example.com/CAS/Authentication 403 (Forbidden)"

"Failed to load https://example.com/CAS/Authentication: Response for preflight has invalid HTTP status code 403"

我认为它来自使用 Ajax 刷​​新局部视图,它 returns 我登录页面,它不在同一个域中。我该如何解决这个问题?

在我的视图中,我使用 Ajax.BeginForm() 将数据发送到控制器,而我的控制器 returns 是部分视图,因此我不需要完全刷新页面。

为了克服跨源请求错误,我需要处理 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/");
    }
}

这样就可以了。