Gab*_*ari 5 .net c# httprequest .net-standard-2.0
我在.netstandard库中工作,因为它应该在 .NetFramework 4.7 和 .NetCore 中工作。在那个库中,我有一个方法可以接收一个HttpRequest对象,使用查询字符串、内容、内容类型等处理请求并返回一个 HttpResponse。
我尝试使用HttpRequestMessage和HttpResponseMessage,但在 .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)
我解决了这个问题,创建了OcspHttpRequest和OcspHttpResponse类。之后,我创建了扩展方法来轻松地将这些类转换为 .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)
归档时间: |
|
查看次数: |
4927 次 |
最近记录: |