Asp.Net 核心 MVC 中的 Request.IsAjaxRequest() 在哪里?
Where is Request.IsAjaxRequest() in Asp.Net Core MVC?
要了解更多令人兴奋的新 Asp.Net-5 框架,我正在尝试使用新发布的 Visual Studio 2015 CTP-6 构建 Web 应用程序。
大多数事情看起来很有希望,但我似乎找不到 Request.IsAjaxRequest() - 我在旧 MVC 项目中经常使用的功能。
是否有更好的方法来做到这一点 - 使他们删除了这种方法 - 或者它 "hidden" 在其他地方?
感谢您提供关于在哪里可以找到它或该怎么做的建议!
我有点困惑,因为标题提到了 MVC 5。
搜索 Ajax
in the MVC6 github repo doesn't give any relevant results,但您可以自己添加扩展名。从 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;
}
自 MVC6 Controller
seems to be using Microsoft.AspNet.Http.HttpRequest, you'd have to check request.Headers
collection 以来,为了适当 header 通过对 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 HttpRequest request)
{
if (request == null)
throw new ArgumentNullException(nameof(request));
if (request.Headers != null)
return request.Headers["X-Requested-With"] == "XMLHttpRequest";
return false;
}
或直接:
var isAjax = request.Headers["X-Requested-With"] == "XMLHttpRequest"
在asp.net核心,你可以使用Context.Request.Headers。
bool isAjaxCall = Context.Request.Headers["x-requested-with"]=="XMLHttpRequest";
对于那些正在 ASP.Net Core
上工作的人
HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest";
例子
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");
在使用上述 Patryk Ćwiek 提供的解决方案后,我注意到一个潜在问题(主要是由于我错误地将“XMLHttpRequest”键入为“XmlHttpRequest”),这导致了不正确的 return 值。为了弥补我的错误,我稍微更新了它。这是我的更新版本:
public static bool IsAjaxRequest(this HttpRequest request)
{
if (request == null)
throw new ArgumentNullException(nameof(request));
if (request.Headers != null)
return !string.IsNullOrEmpty(request.Headers["X-Requested-With"]) &&
string.Equals(
request.Headers["X-Requested-With"],
"XmlHttpRequest",
StringComparison.OrdinalIgnoreCase);
return false;
}
要了解更多令人兴奋的新 Asp.Net-5 框架,我正在尝试使用新发布的 Visual Studio 2015 CTP-6 构建 Web 应用程序。
大多数事情看起来很有希望,但我似乎找不到 Request.IsAjaxRequest() - 我在旧 MVC 项目中经常使用的功能。
是否有更好的方法来做到这一点 - 使他们删除了这种方法 - 或者它 "hidden" 在其他地方?
感谢您提供关于在哪里可以找到它或该怎么做的建议!
我有点困惑,因为标题提到了 MVC 5。
搜索 Ajax
in the MVC6 github repo doesn't give any relevant results,但您可以自己添加扩展名。从 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;
}
自 MVC6 Controller
seems to be using Microsoft.AspNet.Http.HttpRequest, you'd have to check request.Headers
collection 以来,为了适当 header 通过对 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 HttpRequest request)
{
if (request == null)
throw new ArgumentNullException(nameof(request));
if (request.Headers != null)
return request.Headers["X-Requested-With"] == "XMLHttpRequest";
return false;
}
或直接:
var isAjax = request.Headers["X-Requested-With"] == "XMLHttpRequest"
在asp.net核心,你可以使用Context.Request.Headers。
bool isAjaxCall = Context.Request.Headers["x-requested-with"]=="XMLHttpRequest";
对于那些正在 ASP.Net Core
上工作的人HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest";
例子
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");
在使用上述 Patryk Ćwiek 提供的解决方案后,我注意到一个潜在问题(主要是由于我错误地将“XMLHttpRequest”键入为“XmlHttpRequest”),这导致了不正确的 return 值。为了弥补我的错误,我稍微更新了它。这是我的更新版本:
public static bool IsAjaxRequest(this HttpRequest request)
{
if (request == null)
throw new ArgumentNullException(nameof(request));
if (request.Headers != null)
return !string.IsNullOrEmpty(request.Headers["X-Requested-With"]) &&
string.Equals(
request.Headers["X-Requested-With"],
"XmlHttpRequest",
StringComparison.OrdinalIgnoreCase);
return false;
}