C# 在asp.net mvc中,如何授权所有页面中的用户,并根据请求的类型(ajax与否)进行响应?
如何对所有页面和中的用户进行授权 如果请求是“ajax请求”,则通过Json格式进行响应 如果请求不是“ajax请求”,则为noramly响应 例如: 如果请求不是Ajax,则转到登录页面,如果请求是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
注意:我正在寻找一种方法来应用整个项目,而不是每个动作都使用属性过滤器。创建一个自定义属性,如 在控制器中,您可以覆盖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);
}
}
}
你想要自定义授权吗?是的,我想要自定义授权