我使用jquery ajax函数提交表单。
用户必须登录,否则他们必须重定向到登录页面。我已经使用Authorize()属性。
用户必须登录,否则他们必须重定向到登录页面。我已经使用Authorize()属性。
[Authorize] public ActionResult Creat() { .... }
如果用户没有将操作返回登录页面登录到jquery的ajax函数,并且它显示在同一页面上,但是我想将用户重定向到登录页面。
有什么解决方案吗?
解决方法
工作实例:
https://github.com/ronnieoverby/mvc-ajax-auth
重要部分:
AjaxAuthorizeAttribute:
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; } }); });
使用控制器中的属性:
[AjaxAuthorize] public ActionResult Secret() { return PartialView(); }
做一些ajax:
@Ajax.ActionLink("Get Secret","Secret",new AjaxOptions { UpdateTargetId = "secretArea",}) <div id="secretArea"></div>