我有一个动作方法并使用像这样的ajax发布到它:
$.ajax({
url: "/GetSearchCriteria",
type: "GET", //these is must
cache: false, //these is for IE
contentType: "application/json; charset=utf-8",
dataType: "json",
data: {
VehicleId : vehicleId
},
}).done(function (data) {
debugger;
$('#myModal').modal('show');
});
我已经定义了这样的动作方法:
[AjaxAuthorize]
[GET("GetSearchCriteria")]
public ActionResult GetSearchCriteria(VehicleSearchModel model)
{
return Json(model , JsonRequestBehavior.AllowGet);
}
和像这样的ajax请求的Authorize方法:
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 = "/Login" //urlHelper.Action("LogOn", "Account")
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
else
{
base.HandleUnauthorizedRequest(context);
}
}
}
然后这个javacript代码:
$(function () {
$(document).ajaxError(function (e, xhr) {
debugger;
if (xhr.status == 403) {
var response = $.parseJSON(xhr.responseText);
window.location = response.LogOnUrl;
}
});
});
1)。我发现大多数时候这个授权属性都没有被击中。 2)。即使它被命中,然后用户被重定向到逻辑页面,但没有返回URL被追加到url。 3)。任何用户都可以登录(即使他没有被授权登录。我只希望有角色客户的用户以其他方式登录,将他们重定向到非授权页面。
请建议如何操作。
答案 0 :(得分:0)
请确保[Authorize]
级别没有常规Controller
属性。
因为如果是这样,您的自定义[AjaxAuthorize]
将不会被点击。
答案 1 :(得分:-1)
将AttributeUsage添加到您的班级:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,
AllowMultiple = false, Inherited = true)]
public class AjaxAuthorizeAttribute : AuthorizeAttribute { ... }