Как авторизовать пользователей на всех страницах и отвечать в соответствии с типом запроса (ajax или нет) в asp.net mvc? - PullRequest
0 голосов
/ 27 апреля 2018

как авторизовать пользователей на всех страницах и

если запрос является «запросом ajax», то ответ в формате Json

и если запрос не "ajax запрос", noramly ответ

Например:

Если запрос не был Ajax, перейдите на страницу входа в систему, и если запрос был Ajax, то он откроет модальный вход в систему на том же экране страницы

примечание: я ищу способ применить весь проект, а не каждое действие

Ответы [ 3 ]

0 голосов
/ 27 апреля 2018

Здесь я написал тот же пример кода атрибута авторизации. если IsAjaxRequest (), то ответ с JsonResult.

Кроме того, сеанс проверки не существует. Чтобы применить ко всему контроллеру, вам нужно добавить атрибут на уровне класса. [ClassName]

public void OnAuthorization(AuthorizationContext filterContext)
{
 if (filterContext != null)
  {
    BaseController baseController = (BaseController)filterContext.Controller;
    string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;

    if (!baseController.SessionStore.ItemExists(SessionKeys.CEHCKSESSIONEXIST))
    {
        if (baseController.Request.IsAjaxRequest())
        {
            filterContext.Result = new JsonResult
            {
                Data = new { Status = CommonConstants.SessionTimeout },
                JsonRequestBehavior = JsonRequestBehavior.AllowGet,
            };
        }
        else
        {
            filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary {
            { "Controller", "Integration" },
            { "Action", "SessionExpired" }
         });
        }
    }
 }
}
0 голосов
/ 27 апреля 2018

вы можете создать собственный AuthorizeAttribute и переопределить метод HandleUnauthorizedRequest. Вот так

 public class AjaxAuthorizeAttribute: AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if(filterContext.HttpContext.Request.IsAjaxRequest())
            {
                UrlHelper urlhelper = new UrlHelper(filterContext.RequestContext);
                filterContext.Result = new JsonResult
                {
                    Data = new
                    {
                        Error = "NotAuthorize",
                        LogOnUrl = urlhelper.Action("LogOn", "Account")
                    },
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
            }else
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
        }
    }
0 голосов
/ 27 апреля 2018

использовать фильтр атрибутов. Создайте пользовательский атрибут, например

в вашем контроллере вы можете переопределить OnActionExecuting

  protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    bool isAjaxCall = Context.Request.Headers["x-requested-with"]=="XMLHttpRequest" /// in aspnet core.
   isAjax= Request.IsAjax() ///in aspnet 5
    If(isAjaxCall) // handle if request is ajax.
   {
    //return json 
        context.Result = Ok("something in json");
   }
  else{

    base.OnActionExecuting(filterContext);

      }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...