78

私の問題はこれの反対です: HttpRequestBaseをHttpRequestオブジェクトに変換するにはどうすればよいですか?

私のASP.NETMVCアプリケーションには、引数としてHttpRequestBaseを受け取る多くのコントローラーで使用されるメソッドがあります。

ここで、アクションではない別のメソッドからそのメソッドを呼び出す必要があります(これはnhibernateインターセプターです)。この2番目のメソッドでは、HttpRequestであるHttpContext.Current.Requestにアクセスでき、HttpRequestBaseにキャストできません(名前が付けられているため、可能だと思いました...)。

誰かがこのクラスがどのような関係にあるのか、そしてどうすれば私の問題を解決できるのか知っていますか?ありがとうございました。

4

4 に答える 4

132

あなたはあなたを包み込みたいでしょHttpRequestHttpRequestWrapper

var wrapper = new HttpRequestWrapper(httpRequest);

HttpRequestWrapperから継承しますHttpRequestBase

于 2013-03-07T15:45:35.033 に答える
26

これは、新しいインスタンスを作成する必要がない別のソリューションです。

var httpRequestBase = myHttpRequest.RequestContext.HttpContext.Request;
于 2016-11-10T13:24:38.750 に答える
2

私のアプリケーションでは、HttpRequestBaseへのアクセスが必要ないくつかの異なる場所からの呼び出しがありました。この拡張メソッドのセットを作成して、いくつかの異なるHttpタイプを取得してHttpRequestBaseに変換し、リクエストにアクセスする必要があるときに、アプリケーションを介してインターフェイスメソッドとクラスメソッドのベースタイプとしてHttpRequestBaseを使用しました。

public static class RequestExtensions
{
    public static HttpRequestBase GetHttpRequestBase(this HttpContext httpContext)
    {
        if (httpContext == null)
        {
            throw new ArgumentException("Context is null.");
        }

        return httpContext.Request.ToHttpRequestBase();
    }

    public static HttpRequestBase GetHttpRequestBase(this HttpRequestMessage httpRequestMessage)
    {
        if (httpRequestMessage == null)
        {
            throw new ArgumentException("Request message is null.");
        }

        HttpContextWrapper context = null;
        if (httpRequestMessage.Properties.ContainsKey("MS_HttpContext"))
        {
            context = httpRequestMessage.Properties["MS_HttpContext"] as HttpContextWrapper;
        }
        if (context == null)
        {
            throw new ArgumentException("Context is null.");
        }

        return context.Request;
    }

    public static HttpRequestBase GetHttpRequestBase(this HttpApplication httpApplication)
    {
        if (httpApplication == null)
        {
            throw new ArgumentException("Application is null.");
        }

        return httpApplication.Request.ToHttpRequestBase();
    }

    public static HttpRequestBase ToHttpRequestBase(this HttpRequest httpRequest)
    {
        if (httpRequest == null)
        {
            throw new ArgumentException("Request is null.");
        }

        return new HttpRequestWrapper(httpRequest);
    }
}

私はこれらの拡張機能を構築するのに役立ついくつかのSOの答えに出くわしました:

于 2019-02-06T05:00:02.240 に答える
0

次の拡張方法が便利だと思います。

    public static HttpContextBase AsBase(this HttpContext context)
    {
        return new HttpContextWrapper(context);
    }

    public static HttpRequestBase AsBase(this HttpRequest context)
    {
        return new HttpRequestWrapper(context);
    }

使用法:

HttpContext.Current.AsBase()
HttpContext.Current.Request.AsBase()
于 2018-11-01T11:44:52.343 に答える