gpt4 book ai didi

asp.net-mvc - asp.net MVC 中的授权属性和 jquery AJAX

转载 作者:行者123 更新时间:2023-12-02 15:24:49 24 4
gpt4 key购买 nike

我使用jquery ajax函数来提交表单。用户必须登录,否则他们必须重定向到登录页面。我已使用 Authorize() 属性。

[Authorize]
public ActionResult Creat()
{
....
}

如果用户没有登录,操作会将登录页面返回到 jquery 的 ajax 函数,并且它显示在同一页面上,但我想将用户重定向到登录页面。有什么解决办法吗?

最佳答案

工作示例:https://github.com/ronnieoverby/mvc-ajax-auth

重要部分:

AjaxAuthorize属性:

using System.Web.Mvc;

namespace MvcApplication1
{
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext context)
{
if (context.HttpContext.Request.IsAjaxRequest())
{
var urlHelper = new UrlHelper(context.RequestContext);
context.HttpContext.Response.StatusCode = 403;
context.Result = new JsonResult
{
Data = new
{
Error = "NotAuthorized",
LogOnUrl = urlHelper.Action("LogOn", "Account")
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
else
{
base.HandleUnauthorizedRequest(context);
}
}
}
}

Javascript:

    $(function () {
$(document).ajaxError(function (e, xhr) {
if (xhr.status == 403) {
var response = $.parseJSON(xhr.responseText);
window.location = response.LogOnUrl;
}
});
});

在 Controller 中使用该属性:

    [AjaxAuthorize]
public ActionResult Secret()
{
return PartialView();
}

做一些ajax:

@Ajax.ActionLink("Get Secret", "Secret", new AjaxOptions { UpdateTargetId = "secretArea", })

<div id="secretArea"></div>

关于asp.net-mvc - asp.net MVC 中的授权属性和 jquery AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258721/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com