ASP.NET MVC コントローラー内に、HttpRequestオブジェクトを必要とするメソッドがあります。私がアクセスできるのはHttpRequestBaseオブジェクトだけです。
どうにかしてこれを変換できる方法はありますか?
どうすればよいですか?
ASP.NET MVC コントローラー内に、HttpRequestオブジェクトを必要とするメソッドがあります。私がアクセスできるのはHttpRequestBaseオブジェクトだけです。
どうにかしてこれを変換できる方法はありますか?
どうすればよいですか?
テストが不可能な具体的なバージョン(typemockやその他の魔法がなければ)ではなく、アプリケーションでは常にHttpRequestBaseとHttpResponseBaseを使用する必要があります。
以下に示すように、 HttpRequestWrapperクラスを使用して変換するだけです。
var httpRequestBase = new HttpRequestWrapper(Context.Request);
それはあなたの方法なので、取るように書き直すことができますHttpRequestBaseか?そうでない場合は、いつでも現在の情報を取得HttpRequestしHttpContext.Current.HttpRequestて渡すことができます。ただし、 ASP.NET:単体テストのサポートを向上させるためのSystem.Web 依存関係の削除 で説明されているように、HttpContext へのアクセスをクラス内にラップすることがよくあります。
あなたはただ使うことができます
System.Web.HttpContext.Current.Request
ここで重要なのは、"正しい" HttpContext に到達するには完全な名前空間が必要だということです。
この質問が出されてから 4 年が経ちましたが、これが誰かの役に立てば、どうぞ!
(編集:Kevin Hakansonがすでにこの回答を提供しているようです...私の回答が、コメントではなく回答を読んだだけの人に役立つことを願っています。):)
ASP.NET MVC4 .NET 4.5 で HttpRequest を取得するには、次の操作を実行できます。
this.HttpContext.ApplicationInstance.Context.Request
HttpRequestBase を使用して HttpRequestWrapper を使用/作成してみてください。
通常、コントローラー アクションでプロパティにアクセスする必要がHttpContextある場合、より適切に設計できることがあります。
たとえば、現在のユーザーにアクセスする必要がある場合は、アクション メソッドに type のパラメーターを指定しますIPrincipal。このパラメーターにはAttribute、テスト時に必要に応じて と モックを設定します。方法の小さな例については、このブログ投稿、特にポイント 7 を参照してください。
これらの型の間で変換する方法はありません。
同様のケースがありました。クラス/Web サービス メソッドを書き直して、"Base" サフィックスのない近い名前の型 (HttpContext、... HttpSessionState) の代わりに、HttpContextBase、HttpApplicationStateBase、HttpServerUtilityBase、HttpSessionStateBase... を使用するようにしました。自家製のモッキングを使用すると、はるかに簡単に処理できます。
できなくてごめんなさい。
ケビンが言ったように機能しました。
を取得するために静的メソッドを使用しているため、必要に応じ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)