ejemplo de trabajo: https://github.com/ronnieoverby/mvc-ajax-auth
partes importantes:
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;
}
});
});
utilizar el atributo en un controlador:
[AjaxAuthorize]
public ActionResult Secret()
{
return PartialView();
}
Haga un poco de ajax:
@Ajax.ActionLink("Get Secret", "Secret", new AjaxOptions { UpdateTargetId = "secretArea", })
<div id="secretArea"></div>
Totally awesome Ronnie! ¡Me encanta cuando una solución simplemente funciona! Ghooti necesita marcar esta respuesta ... –
@BenPower ¡Gracias por las palabras alentadoras! Me alegro de poder ayudar. –
Tener una medalla de bronce –