我已經使用jquery ajax函數來提交表單。 用戶必須登錄,否則他們必須重定向到登錄頁面。我已經使用了Authorize()屬性。在asp.net中授權屬性和jQuery AJAX MVC
[Authorize]
public ActionResult Creat()
{
....
}
如果用戶沒有登陸行動回報登錄頁面jQuery的AJAX功能,它顯示在同一頁面上,但我想將用戶重定向到登錄頁面。 有沒有解決方法?
我已經使用jquery ajax函數來提交表單。 用戶必須登錄,否則他們必須重定向到登錄頁面。我已經使用了Authorize()屬性。在asp.net中授權屬性和jQuery AJAX MVC
[Authorize]
public ActionResult Creat()
{
....
}
如果用戶沒有登陸行動回報登錄頁面jQuery的AJAX功能,它顯示在同一頁面上,但我想將用戶重定向到登錄頁面。 有沒有解決方法?
Ajax用於部分更新頁面的內容,所以最好是在JavaScript/jquery回調代碼中處理客戶端的重定向。你也可以從這個post得到一些想法。
工作例如: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>
只是一個方便的除了#羅尼的回答
如果你想保持頁面的URL重定向上。
var pathname = window.location.pathname;
if (xhr.status == 403) {
var response = $.parseJSON(xhr.responseText);
window.location = response.LogOnUrl + '?ReturnUrl=' + pathname;
}
更簡單的解決方案imo:'urlHelper.Action'的routeValues的'returnUrl = context.HttpContext.Request.UrlReferrer.LocalPath' – 2016-06-03 23:00:53
作爲Ronnie Overby的答案的另一個擴展。
他的解決方案不適用於webapi,但這很好,因爲您可以使用普通授權 屬性,然後在ajaxError函數中處理401狀態,如下所示。
$(document).ajaxError(function (e, xhr) {
//ajax error event handler that looks for either a 401 (regular authorized) or 403 (AjaxAuthorized custom actionfilter).
if (xhr.status == 403 ||xhr.status == 401) {
//code here
}
});
完全真棒羅尼!當解決方案正常工作時,我喜歡它! Ghooti需要標記這個答案... – 2013-09-24 02:25:57
@BenPower感謝您的鼓勵的話!我很高興能夠提供幫助。 – 2013-09-24 15:41:06
獲得銅牌 – 2013-10-28 23:43:35