Asp.Net Core MVC中的Request.IsAjaxRequest()在哪里?

mik*_*kal 56 c# asp.net-mvc asp.net-core-mvc asp.net-core

要了解有关新的令人兴奋的Asp.Net-5框架的更多信息,我正在尝试使用新发布的Visual Studio 2015 CTP-6构建Web应用程序.

大多数事情看起来很有希望,但我似乎无法找到Request.IsAjaxRequest() - 我在旧的MVC项目中经常使用的功能.

有没有更好的方法来做到这一点 - 这使他们删除了这个方法 - 还是"隐藏"在其他地方?

感谢您在何​​处找到它或做什么的建议!

Pat*_*iek 94

我有点困惑,因为标题提到了MVC 5.

Ajax在MVC6中搜索github repo不会给出任何相关结果,但您可以自己添加扩展.从MVC5项目中反编译提供了非常简单的代码:

/// <summary>
/// Determines whether the specified HTTP request is an AJAX request.
/// </summary>
/// 
/// <returns>
/// true if the specified HTTP request is an AJAX request; otherwise, false.
/// </returns>
/// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception>
public static bool IsAjaxRequest(this HttpRequestBase request)
{
  if (request == null)
    throw new ArgumentNullException(nameof(request));
  if (request["X-Requested-With"] == "XMLHttpRequest")
    return true;
  if (request.Headers != null)
    return request.Headers["X-Requested-With"] == "XMLHttpRequest";
  return false;
}
Run Code Online (Sandbox Code Playgroud)

由于MVC6Controller似乎使用的是Microsoft.AspNet.Http.HttpRequest,因此您必须通过对MVC5版本进行一些调整来检查request.Headers集合的适当标头:

/// <summary>
/// Determines whether the specified HTTP request is an AJAX request.
/// </summary>
/// 
/// <returns>
/// true if the specified HTTP request is an AJAX request; otherwise, false.
/// </returns>
/// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception>
public static bool IsAjaxRequest(this HttpRequest request)
{
  if (request == null)
    throw new ArgumentNullException("request");

  if (request.Headers != null)
    return request.Headers["X-Requested-With"] == "XMLHttpRequest";
  return false;
}
Run Code Online (Sandbox Code Playgroud)

或直接:

var isAjax = request.Headers["X-Requested-With"] == "XMLHttpRequest"
Run Code Online (Sandbox Code Playgroud)


guh*_*eon 20

在asp.net核心中,您可以使用Context.Request.Headers.

bool isAjaxCall = Context.Request.Headers["x-requested-with"]=="XMLHttpRequest"
Run Code Online (Sandbox Code Playgroud)

  • 什么是“上下文”的命名空间? (2认同)
  • @Aligned 不,获取规范中没有关于在请求标头中添加标识符的内容。X-Requested-With 也不在 XMLHttpRequest 规范中(因此有“X-”前缀),但所有供应商都将其添加为约定。没有迹象表明将针对提取进行任何约定。如果您的系统需要知道,那么您需要在创建提取请求时手动添加标头 (2认同)

小智 5

对于那些在 ASP.Net Core 上工作的人

HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest";
Run Code Online (Sandbox Code Playgroud)

示例
Controller.cs

bool isAjax = HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest";

if (isAjax)
   return Json(new { redirectTo = Url.Action("Index", "ControllerAction") });
else
   return RedirectToAction("Index", "ControllerAction");
Run Code Online (Sandbox Code Playgroud)