ASP.NET 5如何将原始字符串转换为HttpRequest/HttpResponse?

3
我们正在处理原始请求和响应。我们想要从套接字中读取原始HTTP消息,并将其转换为Microsoft.AspNet.Http.HttpRequest对象。我们希望对响应执行相同的操作,即将原始文本转换为Microsoft.AspNet.Http.HttpResponse对象,以便根据需要进行操作。
问题是: 如何使用ASP.NET 5中的新类将原始字符串转换为HttpRequest/HttpResponse对象?
编辑: 好的,显然上面的内容不够清晰。这里有一段代码片段,可以更好地解释我们想要的内容:
static void Main()
{
    string http = @"CONNECT www.google.com:443 HTTP/1.0" + "\r\n" +
                "Host: www.google.com:443" + "\r\n" +
                "Content-Length: 0" + "\r\n" +
                "Proxy-Connection: Keep-Alive" + "\r\n" +
                "Pragma: no-cache" + "\r\n" +
                "\r\n\r\n";
     Microsoft.AspNet.Http.HttpRequest request = ParseHttp(http);
}

static Microsoft.AspNet.Http.HttpRequest ParseHttp(string http)
{
    //Magic goes here
}
2个回答

2
首先创建一个new DefaultHttpContext()。这将为您设置所有集合。然后,您只需根据需要设置属性。https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNet.Http/DefaultHttpContext.cs#L34 我没有一个简单的示例来解析请求,但我可以向您展示一个使用客户端的HttpRequestMessage和HttpResponseMessage执行非常相似任务的示例:https://github.com/Tratcher/HttpClient/blob/dev/src/Microsoft.Net.Http.Client/HttpConnection.cs#L29-L41

这非常接近我们所寻找的内容。私有方法“CreateResponseMessage”有多强大?如果其他人也在寻找,这是该dll的nuget包位置:http://blogs.msdn.com/b/martinkearn/archive/2015/06/17/using-httpclient-with-asp-net-5-0.aspx - Benj Sanders
FYI:Microsoft.Net.Http.Client包已经过时,因为System.Net.Http现在适用于CoreClr、Mac、Linux等操作系统。 - Tratcher
不,这不是非常健壮的代码。这只是一个最基本的原型,可以通过套接字在CoreClr上运行,同时我们正在等待System.Net.Http。对于我们所需的内容,它运行得很好,但它不是一个经过加固的通用解决方案。顺便说一下:HTTP需要"\r\n"行结尾,而不是你上面示例中显示的"\n"。 - Tratcher
.NET 5框架是否开源System.Net.Http的当前解析机制?我在这里没有看到:链接。我们在哪里能找到这样的代码? - Benj Sanders
1
CoreCLR (.Net 5) 的 System.Net.Http 不使用托管代码来处理请求,而是在 Windows 上调用 WinHttp,在 Mac/Linux 上调用 libcurl。 - Tratcher

0

嘿,第二个链接已经失效了 :) - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接