Làm cách nào để chuyển đổi HttpRequest thành đối tượng HttpRequestBase?


77

Vấn đề của tôi là ngược lại với điều này: Làm cách nào để chuyển đổi HttpRequestBase thành đối tượng HttpRequest?

Trong ứng dụng ASP.NET MVC của tôi, tôi có một phương pháp được nhiều bộ điều khiển sử dụng nhận HttpRequestBase làm đối số.

Bây giờ tôi phải gọi phương thức đó từ một phương thức khác, đó không phải là một hành động (nó là một bộ đánh chặn nhibernate). Trong phương pháp thứ hai này, tôi có thể truy cập HttpContext.Current.Request, đó là HttpRequest và tôi không thể truyền nó tới HttpRequestBase (tôi nghĩ rằng nó có thể di động do đặt tên ...).

Có ai đó biết mối quan hệ giữa các lớp này là gì và tôi có thể giải quyết vấn đề của mình như thế nào? Cảm ơn bạn.

Câu trả lời:


128

Bạn sẽ muốn bọc của mình HttpRequesttrong HttpRequestWrapper:

var wrapper = new HttpRequestWrapper(httpRequest);

Các HttpRequestWrapperkế thừa từ HttpRequestBase.


9
có thể hữu íchnew HttpRequestWrapper(HttpContext.Current.Request)
Yasser Shaikh

22

Đây là một giải pháp khác không yêu cầu tạo một phiên bản mới:

var httpRequestBase = myHttpRequest.RequestContext.HttpContext.Request;

1

Trong ứng dụng của mình, tôi có các cuộc gọi đến từ một số nơi khác nhau cần quyền truy cập vào HttpRequestBase. Tôi đã tạo bộ phương thức mở rộng này để lấy và chuyển đổi từ một số kiểu Http khác nhau thành HttpRequestBase, sau đó sử dụng HttpRequestBase làm kiểu cơ sở cho các phương thức giao diện và lớp thông qua ứng dụng khi tôi cần quyền truy cập vào yêu cầu.

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);
    }
}

Tôi đã xem một số câu trả lời SO giúp tôi xây dựng các tiện ích mở rộng này:


0

Tôi thấy các phương pháp mở rộng sau hữu ích:

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

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

Sử dụng:

HttpContext.Current.AsBase()
HttpContext.Current.Request.AsBase()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.