Как Вы имеете дело с авторизацией на действиях, которые возвращают результаты кроме ViewResult?

Используйте stopImmediatePropagation функция объекта-события jQuery.

Сохраняет остальную часть обработчиков от того, чтобы быть выполняемым. Этот метод также останавливает пузырение путем вызова event.stopPropagation ().

$(document).click(function(event) { 
  alert('a');
  event.stopImmediatePropagation();
  return false;
});

$(document).click(function() {
  alert('b');
});

5
задан Nick 24 September 2009 в 15:56
поделиться

2 ответа

Я думаю, вам нужно будет передать эту информацию с перенаправлением.

Есть несколько способов справиться с этим:

  • Рассмотрите возможность создания отдельных методов действий для каждого типа ответа, который вам нужен - UnauthorizedJson, UnauthorizedHtml, UnauthorizedEtc ... которые соответствовали исходному типу ответа действия

  • Передайте формат информацию с перенаправлением, добавив еще один параметр к неавторизованному методу и добавив его к URL-адресу в вашем фильтре

1
ответ дан 13 December 2019 в 22:11
поделиться

Используйте Request.IsAjaxRequest (), например:

public sealed class AjaxAuthorizeAttribute : AuthorizeAttribute
{
    public AjaxAuthorizeAttribute() : base()
    {
    }

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        // Extends the original Web.MVC.AuthorizeAttribute for Ajax calls.
        // Basically if the request is not authorized and the request is an AJAX Request.
        // then we simply set the stats Code to 403 and set an empty Result, in order to 
        // determine in Javascript if the AJAX call came back completed and valid.
        base.OnAuthorization(filterContext);
        if (filterContext.Result == null)
        {
            return;
        }
        else if (filterContext.Result.GetType() == typeof(HttpUnauthorizedResult) 
                 && filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.Result = new ContentResult();
            filterContext.HttpContext.Response.StatusCode = 403;
        }
    }
}

Примечание 403, а не 401, поскольку ASP.NET перехватывает 401 и превращает их в страницы ошибок HTML. Неважно, что ожидал вызов AJAX; он все еще может видеть код состояния.

9
ответ дан 13 December 2019 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: