1. ホーム
  2. c#

[解決済み] Asp.Net Core MVCのRequest.ISAjaxRequest()はどこにあるのか?

2023-06-03 05:37:42

質問

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

ほとんどのものは本当に有望に見えますが、Request.IsAjaxRequest() - 私が古いMVCプロジェクトでかなり頻繁に使用してきた機能 - を見つけることができないようです。

これを行うより良い方法があります - このメソッドを削除させた - またはそれはどこか他の場所に "hidden"されていますか?

どこでそれを見つけるか、または代わりに何をするかについて、どんなアドバイスでもありがとうございます!

どのように解決するのですか?

タイトルに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;
}

以来 MVC6 Controller が使われているようです。 Microsoft.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(nameof(request));

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

または直接

var isAjax = request.Headers["X-Requested-With"] == "XMLHttpRequest"