确定是否请求在ASP.NET MVC 3 PartialView或AJAX请求(Determine

2019-09-24 02:49发布

我给的存取权限的网站的用户。 我在这里做过滤:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
}

问题是,我无法分辨全景观要求,如从PartialViewRequests或AJAX调用请求“索引”。

因此,页面'Index'访问,但'PartialViewGridViewForIndex'无权访问。

酒店ControllerContext.IsChildAction也没有帮助。

Answer 1:

你可以使用IsAjaxRequest扩展方法来确定是否一个AJAX请求来调用此控制器操作:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if (filterContext.HttpContext.Request.IsAjaxRequest())
    {
        // the controller action was invoked with an AJAX request
    }
}


Answer 2:

您可以在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
  {
      // -------
  }


Answer 3:

我会通过扩展来建立一个授权过滤器AuthorizeAttribute 。 然后我把我的代码在OnAuthorize覆盖。 在FilterContext对象,你可以看一下FilterContext.ActionDescriptor.MethodInfo.ReturnType.Name 。 对于一个局部视图,这将是PartialViewResult



文章来源: Determine if request is PartialView or AJAX request in ASP.NET MVC 3