Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#HTTP服务器-在不处理post数据的情况下响应post请求_C#_Http_Post_Server_Get - Fatal编程技术网

C#HTTP服务器-在不处理post数据的情况下响应post请求

C#HTTP服务器-在不处理post数据的情况下响应post请求,c#,http,post,server,get,C#,Http,Post,Server,Get,我目前正在使用C#编写的本地http服务器。此时,我还没有处理post数据,只是区分get和post请求。当然,在这两种情况下,答案都是200。在测试服务器时,我注意到,如果我发送一个空的post请求,服务器会以200和html页面响应它,就像get请求一样,没有任何问题。但是,如果post请求附加了图像(如我的示例中所示),则与服务器的连接会立即失败 我按如下方式处理客户端连接。我知道将接收到的字节存储在字符串中并不理想,但出于测试目的,我没有发现任何问题 private void Handl

我目前正在使用C#编写的本地http服务器。此时,我还没有处理post数据,只是区分get和post请求。当然,在这两种情况下,答案都是200。在测试服务器时,我注意到,如果我发送一个空的post请求,服务器会以200和html页面响应它,就像get请求一样,没有任何问题。但是,如果post请求附加了图像(如我的示例中所示),则与服务器的连接会立即失败

我按如下方式处理客户端连接。我知道将接收到的字节存储在字符串中并不理想,但出于测试目的,我没有发现任何问题

private void HandleClient(TcpClient client)
{
    Byte[] bytes;
    String requestData = "";
    NetworkStream ns = client.GetStream();
    if (client.ReceiveBufferSize > 0)
    {
        bytes = new byte[client.ReceiveBufferSize];
        ns.Read(bytes, 0, client.ReceiveBufferSize);
        requestData = Encoding.ASCII.GetString(bytes);
    }

    // Get Request out of message
    Request request = Request.GetRequest(requestData);
    // Create Response
    Response response = Response.From(request);
    response.Post(client.GetStream());           
}
下面是我用来确定请求类型的方法

public static Request GetRequest(String request)
{
    //return if request is null
    if(String.IsNullOrEmpty(request))
    {
        return null;
    }
    //Split Request to get tokens - split by spaces
    String[] tokens = request.Split(' ');
    String type = tokens[0];
    String url = tokens[1];
    String host = tokens[4];

    return new Request(type, url, host);
}

当然,必须能够从get和post请求中只读取头,然后仍然给出200个响应。http服务器在如何处理请求后数据方面是否有行为规则?

最后,我的问题的答案非常简单。在服务器能够响应请求之前,必须完全读取请求的输入流。在我的情况下,我只是读取请求的标题,以了解它是否是Post或Get请求,因此服务器无法在附加图像的情况下响应请求,因为没有完全读取输入流。

附加的图像应该是mime附件,以一行开头,该行开头有两个破折号。请参阅:确实如此,但我的问题是,是否可能根本不读取附加的数据并立即返回响应HTTP消息是以一段形式发送的,服务器必须等待整个消息通过Internet发送并存储在服务器的内存中。您无需阅读正文即可将响应发送回客户端。内存流中的读取发生得非常快,但确实使用额外的内存,如果内存不足,读取速度可能会很慢。如果您试图写入文件,则会减慢读取速度。您有一个控制器,您要做的是在反序列化接收的数据之前发送响应,而不是等到反序列化之后。