我下面有一些代码,这样当用户在mvc控制器中调用方法时,它会进行一些检查,看看它是否是Ajax调用。如果Ajax返回json响应,则返回url字符串(安全页面(。当我在visualstudio中运行时,代码工作得很好,所以它识别出调用是ajax调用,但在生产服务器变量"上;isAjax";设置为false。为什么它可以在visual(localiis(中本地工作,但不能在服务器上工作?
var isAjax = (filterContext.RequestContext.HttpContext.Request["X-Requested-With"] == "XMLHttpRequest") ||
((filterContext.RequestContext.HttpContext.Request.Headers != null) &&
(filterContext.RequestContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest"));
在浏览器的网络选项卡上,它显示正在通过(下图(
网络选项卡
public ActionResult GetData()
{
if(Request.IsAjaxRequest())
return RedirectToAction("AjaxRequest");
else
return RedirectToAction("NonAjaxRequest");
}
您可以在控制器级别检查当前请求,而不是检查标头。
AJAX调用将有一个名为X-Requested-With的头,其值将为XMLHttpRequest。所以你可以这样检查:
bool isAjaxRequest = request.Headers["X-Requested-With"] == "XMLHttpRequest";
否则,您可以使用System.Web.MVC引用并使用该函数。
bool isAjaxRequest = Request.IsAjaxRequest();