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

时间:2015-08-28 10:06:18

标签: ajax asp.net-mvc

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

这适用于整页加载,但是对于我的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>

部分视图:

@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>

控制器:

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

如果有人有任何想法,他们将非常感激!

1 个答案:

答案 0 :(得分:2)

你必须覆盖默认行为 - 我认为你的问题是当用户点击需要授权并且当前他的会话已经过期的动作时,AJAX响应不再有效。

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

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

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