我给的存取权限的网站的用户。 我在这里做过滤:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
}
问题是,我无法分辨全景观要求,如从PartialViewRequests或AJAX调用请求“索引”。
因此,页面'Index'
访问,但'PartialViewGridViewForIndex'
无权访问。
酒店ControllerContext.IsChildAction
也没有帮助。
你可以使用IsAjaxRequest扩展方法来确定是否一个AJAX请求来调用此控制器操作:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
// the controller action was invoked with an AJAX request
}
}
您可以在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
{
// -------
}
我会通过扩展来建立一个授权过滤器AuthorizeAttribute
。 然后我把我的代码在OnAuthorize
覆盖。 在FilterContext
对象,你可以看一下FilterContext.ActionDescriptor.MethodInfo.ReturnType.Name
。 对于一个局部视图,这将是PartialViewResult
。