使用 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);
}
我在客户端收到错误:
如果有人有任何想法,我们将不胜感激!
最佳答案
您必须覆盖默认行为 - 我假设您的问题是,当用户点击需要授权的操作且当前其 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/