Porównaj ceny domen i usług IT, sprzedawców z całego świata

Atrybut autoryzacji dla żądań ajax w asp.net MVC 4


Mam metodę akcji i wysyłam do niej za pomocą Ajax w następujący sposób:
$.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'); });

Zdefiniowałem sposób działania w następujący sposób:
[AjaxAuthorize]
[GET("GetSearchCriteria")]
public ActionResult GetSearchCriteria(VehicleSearchModel model)
{ return Json(model , JsonRequestBehavior.AllowGet);
}

i autoryzuj metodę dla żądań Ajax, takich jak ta:
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);
}
}
}

A następnie ten kod JavaScript:
$(function () {
$(document).ajaxError(function (e, xhr) {
debugger;
if (xhr.status == 403) {
var response = $.parseJSON(xhr.responseText);
window.location = response.LogOnUrl;
}
});
});

jeden). Widzę, że w większości przypadków brakuje tego atrybutu autoryzacji.
2). Nawet jeśli zostanie trafiony, to użytkownik jest przekierowywany na stronę boolowską, ale zwrotny adres URL nie jest dołączany do adresu URL.
3). Każdy może się zalogować (nawet jeśli nie jest upoważniony do logowania. Chcę, aby tylko użytkownicy z rolą klienta logowali się w inny sposób, aby przekierowywać ich na nieautoryzowaną stronę).
Proszę, powiedz mi, jak to zrobić.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Upewnij się, że nie masz zwykłego atrybutu
[Autoryzuj]
na poziomie
. 
Ponieważ w takim przypadku Twój niestandardowy
[AjaxAuthorize]
nie zostanie trafiony.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dodaj AttributeUsage do swojej klasy:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,
AllowMultiple = false, Inherited = true)]
public class AjaxAuthorizeAttribute : AuthorizeAttribute { ... }

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się