ASP.NET MVC ActionFilter - 判断是否为 AJAX 请求

17

我正在使用一个 ActionFilter 来确定用户是否有访问特定资源(例如 Account 对象,类似于 Rhino Security)的权限,然后再执行操作。这是一个全局过滤器,如果授权值失败,则会重定向到错误页面。

我正在使用以下代码,对于完整页面请求工作正常:

filterContext.Controller.TempData["ErrorMessage"] = string.Format("You are not authorized to perform operation: {0}", operation);
filterContext.Result = new RedirectResult("~/Error/AuthorizationError");

我不想对Ajax请求进行重定向,而是想返回一个错误消息。有没有一种方法可以在操作过滤器内判断这是否为Ajax请求或者是一个常规的完整页面(抱歉,我不确定术语的正确性)请求?

提前感谢。

JP

1个回答

40
你可以使用IsAjaxRequest扩展方法:
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
    // it was an AJAX request
    ...
}
else
{
    // it was a standard request
    filterContext.Controller.TempData["ErrorMessage"] = string.Format("You are not authorized to perform operation: {0}", operation);
    filterContext.Result = new RedirectResult("~/Error/AuthorizationError");
}

1
这看起来正是我们想要做的事情。但是...由于某种原因,当它是一个 AJAX 请求时,那个条件 filterContext.HttpContext.Request.IsAjaxRequest() 没有返回 true。另外...你如何从一个 AJAX 请求中将用户重定向到一个新页面? - Aarmora
@bubbleking,我希望我能给你一个好的答案。但是我甚至都不记得我们当时在尝试哪个页面了。很抱歉:( - Aarmora

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接