在 .netstandard 2 中使用哪个 HttpRequest 类?

Gab*_*ari 5 .net c# httprequest .net-standard-2.0

我在.netstandard库中工作,因为它应该在 .NetFramework 4.7 和 .NetCore 中工作。在那个库中,我有一个方法可以接收一个HttpRequest对象,使用查询字符串、内容、内容类型等处理请求并返回一个 HttpResponse。

我尝试使用HttpRequestMessageHttpResponseMessage,但在 .NetCore API 中,我们没有这些类。在这种情况下,对于 HttpRequest 和 HttpResponse 使用哪个类最好?

例子:

public interface IOcspResponder
{
    Task<HttpResponseMessage> Respond(HttpRequestMessage httpRequest);
}
Run Code Online (Sandbox Code Playgroud)

客户端将实现一个控制器并通过以下方式使用库:

[RoutePrefix("api/ocsp")]
public class OcspController : Controller
{
    [Route("{encoded}"]
    public Task<HttpResponseMessage> Get(string encoded)
    {
        return await OcspResponder.Respond(Request);
    }

    [Route("")]
    public Task<HttpResponseMessage> Post()
    {
        return await OcspResponder.Respond(Request);
    }

    private IOcspResponder OcspResponder { get; }

    public OcspController(IOcspResponder ocspResponder)
    {
        OcspResponder = ocspResponder;
    }
}
Run Code Online (Sandbox Code Playgroud)

Gab*_*ari 2

我解决了这个问题,创建了OcspHttpRequestOcspHttpResponse类。之后,我创建了扩展方法来轻松地将这些类转换为 .NET Framework 和 .NET Core 的本机类。

.NET Framework 示例:

public static async Task<OcspHttpRequest> ToOcspHttpRequest(this HttpRequestMessage requestMessage)
{
    var httpRequestBase = new OcspHttpRequest
    {
       HttpMethod = requestMessage.Method.Method,
       MediaType = requestMessage.Content.Headers.ContentType.MediaType,
       RequestUri = requestMessage.RequestUri,
       Content = await requestMessage.Content.ReadAsByteArrayAsync()
     };

     return httpRequestBase;
 }
Run Code Online (Sandbox Code Playgroud)

.NET Core 示例:

public static async Task<OcspHttpRequest> ToOcspHttpRequest(this HttpRequest request)
{
    var ocspHttpRequest = new OcspHttpRequest();
    ocspHttpRequest.HttpMethod = request.Method;
    ocspHttpRequest.MediaType = request.ContentType;
    ocspHttpRequest.RequestUri = request.GetUri();
    ocspHttpRequest.Content = await request.GetRawBodyBytesAsync();

    return ocspHttpRequest;
}
Run Code Online (Sandbox Code Playgroud)

  • 您能否提供 OcspHttpRequest 类的主体? (2认同)