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

标签 asp.net-mvc ajax authorize

我使用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/

相关文章:

asp.net mvc ajax上传文件

asp.net-mvc - 在 Controller 中授权一项操作但不需要角色

asp.net-mvc - ASP.NET MVC 5(Visual Studio 2013 预览版)更改 [授权] 的登录 URL

java - Jquery在循环中设置索引位置html标签的值

javascript - 通过一个按钮同时执行两个 JavaScript 函数?

javascript - 将类应用于 HTML 中被 AJAX 调用的 div?

Swagger/Swashbuckle 授权。默认检查范围

c# - 有条件地忽略授权 .NET Core 3.1

c# - 将动态 C# 对象序列化为 JSON

javascript - 动态变量名称javascript MVC