若要了解有关令人兴奋的新Asp.Net-5框架的更多信息,我试图使用新发布的Visual Studio 2015 CTP-6构建Web应用程序。
大多数事情看起来确实很有希望,但是我似乎找不到Request.IsAjaxRequest()-我在较老的MVC项目中经常使用的功能。
有没有更好的方法可以做到这一点-迫使他们删除此方法-还是“隐藏”在其他地方?
感谢您对在哪里找到它或该怎么做的任何建议!
若要了解有关令人兴奋的新Asp.Net-5框架的更多信息,我试图使用新发布的Visual Studio 2015 CTP-6构建Web应用程序。
大多数事情看起来确实很有希望,但是我似乎找不到Request.IsAjaxRequest()-我在较老的MVC项目中经常使用的功能。
有没有更好的方法可以做到这一点-迫使他们删除此方法-还是“隐藏”在其他地方?
感谢您对在哪里找到它或该怎么做的任何建议!
IsAjaxRequest()
不带Request.
前缀。
Answers:
我有点困惑,因为标题提到了MVC 5。
Ajax
在MVC6 github存储库中进行搜索不会给出任何相关结果,但是您可以自己添加扩展名。从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;
}
由于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(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"
Context
什么?
对于那些正在使用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”)导致返回值不正确。为了适应我的错误,我对其进行了稍微的更新。这是我的更新版本:
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;
}
System.Web.Mvc
class中的扩展方法AjaxRequestExtensions
。那是针对MVC5的,我不知道MVC6 ...