C# 在asp.net mvc中,如何授权所有页面中的用户,并根据请求的类型(ajax与否)进行响应?

C# 在asp.net mvc中,如何授权所有页面中的用户,并根据请求的类型(ajax与否)进行响应?,c#,json,ajax,asp.net-mvc,C#,Json,Ajax,Asp.net Mvc,如何对所有页面和中的用户进行授权 如果请求是“ajax请求”,则通过Json格式进行响应 如果请求不是“ajax请求”,则为noramly响应 例如: 如果请求不是Ajax,则转到登录页面,如果请求是Ajax,则会在同一页面屏幕上打开登录模式 注意:我正在寻找一种方法来应用整个项目,而不是每个动作都使用属性过滤器。创建一个自定义属性,如 在控制器中,您可以覆盖OnActionExecuting protected override void OnActionExecuting(ActionE

如何对所有页面和中的用户进行授权

如果请求是“ajax请求”,则通过Json格式进行响应

如果请求不是“ajax请求”,则为noramly响应

例如:

如果请求不是Ajax,则转到登录页面,如果请求是Ajax,则会在同一页面屏幕上打开登录模式


注意:我正在寻找一种方法来应用整个项目,而不是每个动作都使用属性过滤器。创建一个自定义属性,如

在控制器中,您可以覆盖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);

      }

}

在这里,我编写了相同的授权属性示例代码。如果是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" }
         });
        }
    }
 }
}

您可以像这样创建自定义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);
            }
        }
    }

你想要自定义授权吗?是的,我想要自定义授权