C# Kestrel修改传入的http头

C# Kestrel修改传入的http头,c#,asp.net-core,kestrel-http-server,C#,Asp.net Core,Kestrel Http Server,我有一个IP摄像头,我正试图从中接收事件。例如,如果它检测到帧中某个特定部分的运动,我想了解它并获取事件捕获的图像 问题是它使用HTTP/1.0 POST发送此信息。根据spec(),主体长度可以通过Content-length头进行通信,也可以在所有内容都发送到服务器时关闭连接。IP摄像头执行两种方法中的后一种 Kestrel的web服务器不支持此功能,如图所示Microsoft.AspNetCore.server.Kestrel.Core.Internal.Http.Http1Message

我有一个IP摄像头,我正试图从中接收事件。例如,如果它检测到帧中某个特定部分的运动,我想了解它并获取事件捕获的图像

问题是它使用HTTP/1.0 POST发送此信息。根据spec(),主体长度可以通过Content-length头进行通信,也可以在所有内容都发送到服务器时关闭连接。IP摄像头执行两种方法中的后一种

Kestrel的web服务器不支持此功能,如图所示Microsoft.AspNetCore.server.Kestrel.Core.Internal.Http.Http1MessageBody.For()包含以下内容(,第308-318行):

因此,Kestrel每次都抛出一个BadHttpRequestException

关于如何解决这个问题有什么想法吗

  • 可以运行在Kestrel旁边的TCP服务器

  • 添加内容长度的低级钩子


是否可以使用Apache或Nginx等反向代理?FWIW,如果使用Windows,请尝试作为替代。看来Kestrel标头解析很难覆盖:
// Avoid slowing down most common case
if (!object.ReferenceEquals(context.Method, HttpMethods.Get))
{
    // If we got here, request contains no Content-Length or Transfer-Encoding header.
    // Reject with 411 Length Required.
    if (context.Method == HttpMethod.Post || context.Method == HttpMethod.Put)
    {
        var requestRejectionReason = httpVersion == HttpVersion.Http11 ? RequestRejectionReason.LengthRequired : RequestRejectionReason.LengthRequiredHttp10;
        BadHttpRequestException.Throw(requestRejectionReason, context.Method);
    }
}