MVC 身份验证超时/ session cookie 删除后的 Ajax 请求

标签 ajax asp.net-mvc

使用 MVC 5 身份验证,当用户超时或 session cookie cookie 被删除时,用户将被重定向到登录页面。

这在整页加载时工作正常,但是对于我的 Ajax 调用,这会破坏客户端。重定向在身份验证页面显示时起作用,但没有响应(在标准加载轮后面)。

我很确定这是某种 JS 问题。

JS:

$(function () {
    $('#dealSearchForm').on("submit", function (e) {
        e.preventDefault();
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (data) {
                $('#dealSearchForm').html(data);
            },
            complete: function (data) {
                $('#searchResults').show();
            }
        });
    });
});

主视图:

@{Html.RenderPartial("_DealSearch");}

<script src="@Url.Content("~/Scripts/DealSearch.js")"></script>

<script>

    $(document).ready(function () {
        @if (Model.Deals.Count > 0) {
            @Html.Raw("$('#searchResults').show();");
        }
    });

</script>

部分 View :

@using (Html.BeginForm("DealSearch", DealManagement, FormMethod.Post, new { @id = "dealSearchForm" }))
{
/* Search filters etc */

<div class="col-xs-7">
    <button id="button-search" class="btn btn-primary pull-right" type="submit" data-loading-text="Please wait...">Search</button>
</div>

<div id="searchResults">
    /* Grid with results */
</div>

Controller :

public virtual ActionResult Index()
        {
            var model = new DealSearchModel();

            return this.View(model);
        }

public virtual ActionResult DealSearch(DealSearchModel model)
        {
            // Get deals from service, uses search criteria
            model.Deals = GetDeals(model);

            // Return the view
            return PartialView(MVC.DealManagement.Views._DealSearch, model);
        }

我在客户端收到错误:

Error client side

如果有人有任何想法,我们将不胜感激!

最佳答案

您必须覆盖默认行为 - 我假设您的问题是,当用户点击需要授权的操作且当前其 session 已过期时,AJAX 响应不再有效。

您没有提供如何授权方法,但考虑创建自定义授权属性:

public class CustomAuthorizationAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        // Check whether it is an AJAX or standard request
    }
}

如何判断是否是AJAX请求可以查看here 。您应该返回 403 未经授权的结果并在 AJAX 调用中处理它,而不是重定向。

关于MVC 身份验证超时/ session cookie 删除后的 Ajax 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32268446/

相关文章:

ajax - 从 https 重定向到 http?

asp.net-mvc - 将 ASPX 行转换为 Razor 行

javascript - 在对话框中 knockout ASP MVC 问题

php - 使用 javascript/ajax 提交具有不同输入类型的 php 表单

javascript - each() 函数中的多个 ajax 调用.. 然后在所有调用完成后执行某些操作?

javascript - 提交表格,停留在同一页面并消息确认

c# - 如何从 webservice 返回 xml 数据到 jquery ajax 调用

c# - 如何在 MVC 中运行控制台应用程序

asp.net-mvc - 在 ModelBinder 中对特定数据类型进行自定义绑定(bind)

c# - 在 Microsoft IIS 服务器上部署 ASP.NET MVC 应用程序失败