web-dev-qa-db-ja.com

Asp.Net Core MVCのRequest.IsAjaxRequest()はどこにありますか?

新しいエキサイティングなAsp.Net-5フレームワークの詳細については、新しくリリースされたVisual Studio 2015 CTP-6を使用してWebアプリケーションを構築しようとしています。

ほとんどのものは本当に有望に見えますが、Request.IsAjaxRequest()-古いMVCプロジェクトで非常に頻繁に使用している機能が見つかりません。

これを行うためのより良い方法はありますか?それは彼らにこのメソッドを削除させましたか?それは他のどこかに「隠されています」か?

どこでそれを見つけるか、代わりに何をすべきかについてのアドバイスをありがとう!

48
mikal

タイトルにMVC 5が記載されていたため、少し混乱しました。

MVC6 githubリポジトリのAjaxで関連する結果が得られない を検索しますが、自分で拡張機能を追加できます。 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 ControllerMicrosoft.AspNet.Http.HttpRequest を使用しているようであるため、チェックする必要があります request.Headersコレクション 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("request");

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

または直接:

var isAjax = request.Headers["X-Requested-With"] == "XMLHttpRequest"
90
Patryk Ćwiek

asp.netコアでは、Context.Request.Headersを使用できます。

bool isAjaxCall = Context.Request.Headers["x-requested-with"]=="XMLHttpRequest"
18
guhyeon