我必须为网站用户提供访问权限。 我在这里进行过滤:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
}
问题是我无法从PartialViewRequests或AJAX调用请求中区分完整的View请求,例如'Index'。
因此,'Index'
页面具有访问权限,但'PartialViewGridViewForIndex'
无权访问。
属性ControllerContext.IsChildAction
也无济于事。
答案 0 :(得分:31)
您可以使用IsAjaxRequest扩展方法来确定是否使用了AJAX请求来调用此控制器操作:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
// the controller action was invoked with an AJAX request
}
}
答案 1 :(得分:1)
您可以在asp.net Core 2中扩展HttpRequestExtensions,如下所示
public static class HttpRequestExtensions
{
private const string RequestedWithHeader = "X-Requested-With";
private const string XmlHttpRequest = "XMLHttpRequest";
public static bool IsAjaxRequest(this HttpRequest request)
{
if (request == null)
{
throw new ArgumentNullException("request");
}
if (request.Headers != null)
{
return request.Headers[RequestedWithHeader] == XmlHttpRequest;
}
return false;
}
}
并将其用作
if (!Request.IsAjaxRequest())
{
//----
}
else
{
// -------
}
答案 2 :(得分:0)
我会通过扩展AuthorizeAttribute
来创建授权过滤器。然后我会将我的代码放在OnAuthorize
覆盖中。在FilterContext
对象中,您可以查看FilterContext.ActionDescriptor.MethodInfo.ReturnType.Name
。对于部分视图,这将是PartialViewResult
。