90

ASP.NET MVC コントローラー内に、HttpRequestオブジェクトを必要とするメソッドがあります。私がアクセスできるのはHttpRequestBaseオブジェクトだけです。

どうにかしてこれを変換できる方法はありますか?

どうすればよいですか?

4

9 に答える 9

74

テストが不可能な具体的なバージョン(typemockやその他の魔法がなければ)ではなく、アプリケーションでは常にHttpRequestBaseとHttpResponseBaseを使用する必要があります。

以下に示すように、 HttpRequestWrapperクラスを使用して変換するだけです。

var httpRequestBase = new HttpRequestWrapper(Context.Request);
于 2013-02-27T12:29:10.390 に答える
51

それはあなたの方法なので、取るように書き直すことができますHttpRequestBaseか?そうでない場合は、いつでも現在の情報を取得HttpRequestHttpContext.Current.HttpRequestて渡すことができます。ただし、 ASP.NET:単体テストのサポートを向上させるためのSystem.Web 依存関係の削除 で説明されているように、HttpContext へのアクセスをクラス内にラップすることがよくあります。

于 2009-09-21T01:44:44.903 に答える
32

あなたはただ使うことができます

System.Web.HttpContext.Current.Request

ここで重要なのは、"正しい" HttpContext に到達するには完全な名前空間が必要だということです。

この質問が出されてから 4 年が経ちましたが、これが誰かの役に立てば、どうぞ!

(編集:Kevin Hakansonがすでにこの回答を提供しているようです...私の回答が、コメントではなく回答を読んだだけの人に役立つことを願っています。):)

于 2013-06-08T22:47:39.357 に答える
10

ASP.NET MVC4 .NET 4.5 で HttpRequest を取得するには、次の操作を実行できます。

this.HttpContext.ApplicationInstance.Context.Request
于 2014-03-05T16:40:18.060 に答える
9

HttpRequestBase を使用して HttpRequestWrapper を使用/作成してみてください。

于 2010-04-18T17:32:03.380 に答える
4

通常、コントローラー アクションでプロパティにアクセスする必要がHttpContextある場合、より適切に設計できることがあります。

たとえば、現在のユーザーにアクセスする必要がある場合は、アクション メソッドに type のパラメーターを指定しますIPrincipal。このパラメーターにはAttribute、テスト時に必要に応じて と モックを設定します。方法の小さな例については、このブログ投稿、特にポイント 7 を参照してください。

于 2009-09-21T01:37:27.627 に答える
2

これらの型の間で変換する方法はありません。

同様のケースがありました。クラス/Web サービス メソッドを書き直して、"Base" サフィックスのない近い名前の型 (HttpContext、... HttpSessionState) の代わりに、HttpContextBase、HttpApplicationStateBase、HttpServerUtilityBase、HttpSessionStateBase... を使用するようにしました。自家製のモッキングを使用すると、はるかに簡単に処理できます。

できなくてごめんなさい。

于 2010-09-08T10:18:41.630 に答える
1

ケビンが言ったように機能しました。

を取得するために静的メソッドを使用しているため、必要に応じHttpContext.Current.Requestて常にHttpRequestオブジェクトを使用できます。

クラスヘルパーはこちら

public static HttpRequest GetRequest()
{
    return HttpContext.Current.Request;
}

ここのコントローラー

if (AcessoModel.UsuarioLogado(Helper.GetRequest()))

ヒア・イン・ビュー

bool bUserLogado = ProjectNamespace.Models.AcessoModel.UsuarioLogado(
                      ProjectNamespace.Models.Helper.GetRequest()
                   );

if (bUserLogado == false) { Response.Redirect("/"); }

マイメソッド

public static bool UsuarioLogado(HttpRequest Request)
于 2010-07-19T16:09:36.737 に答える