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

时间:2017-12-18 17:43:32

标签: ajax asp.net-mvc cors partial-views

我正在处理用ASP.NET MVC5编写的应用程序,该应用程序要求用户登录。该身份验证适用于中央身份验证服务(CAS)。在主页上,我有几个部分观点:

Home page with partial views

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

它运作良好,直到CAS会话到期。如果我尝试刷新部分视图,我会收到错误:

“选项https://example.com/CAS/Authentication 403(禁止)”

“无法加载https://example.com/CAS/Authentication:预检的响应包含无效的HTTP状态代码403”

我认为它来自使用Ajax刷新部分视图,它返回登录页面,该页面不在同一个域中。我该如何克服这个问题?

在我的视图中,我使用Ajax.BeginForm()将数据发送到Controller,我的控制器返回部分视图,这样我就不需要完全刷新页面了。

1 个答案:

答案 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/");
    }
}

这就是诀窍。