Development Tip

HttpRequest를 HttpRequestBase 개체로 어떻게 변환합니까?

yourdevel 2020. 10. 26. 21:27
반응형

HttpRequest를 HttpRequestBase 개체로 어떻게 변환합니까?


내 문제는 이것의 반대입니다. HttpRequestBase를 HttpRequest 객체로 어떻게 변환합니까?

내 ASP.NET MVC 응용 프로그램에는 HttpRequestBase를 인수로받는 많은 컨트롤러에서 사용하는 메서드가 있습니다.

이제 다른 메서드에서 해당 메서드를 호출해야합니다. 이는 작업이 아닙니다 (nhibernate 인터셉터입니다). 이 두 번째 방법에서는 HttpContext.Current.Request에 액세스 할 수 있는데, 이는 HttpRequest이며 HttpRequestBase로 캐스팅 할 수 없습니다 (이름 지정으로 인해 가능하다고 생각했습니다 ...).

누군가이 수업이 어떤 관계인지 알고 어떻게 내 문제를 해결할 수 있습니까? 감사합니다.


다음 HttpRequest과 같이 포장하고 싶을 것입니다 HttpRequestWrapper.

var wrapper = new HttpRequestWrapper(httpRequest);

HttpRequestWrapper상속에서 HttpRequestBase.


새 인스턴스를 만들 필요가없는 대체 솔루션 :

var httpRequestBase = httpRequest.RequestContext.HttpContext.Request;

MVC 5에서 이것을 테스트했습니다.


다음 확장 방법이 유용하다고 생각합니다.

    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()

내 응용 프로그램에서 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 답변을 발견했습니다.

참고URL : https://stackoverflow.com/questions/15275370/how-do-i-convert-an-httprequest-into-an-httprequestbase-object

반응형