微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C# HTTP Server - 响应 post 请求而不处理 post 数据

如何解决C# HTTP Server - 响应 post 请求而不处理 post 数据

我目前正在开发一个用 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,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 请求,因此服务器无法在附加图像的情况下响应请求,因为未读取输入流完全。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。