C# HTTP 服务器 - 响应 post 请求而不处理 post 数据
C# HTTP Server - Respond post request without processing post data
我目前正在使用 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 请求中只读取 headers,然后仍然给出 200 响应。 http 服务器是否有关于如何处理 post-request 数据的行为规则?
最后我的问题的答案很简单。在服务器响应请求之前,必须完全读取请求的输入流。在我的情况下,我只读取了请求的 header 以了解它是 Post 还是 Get 请求,因此在附加图像的情况下服务器无法响应请求,因为输入流没有被完全读取。
我目前正在使用 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 请求中只读取 headers,然后仍然给出 200 响应。 http 服务器是否有关于如何处理 post-request 数据的行为规则?
最后我的问题的答案很简单。在服务器响应请求之前,必须完全读取请求的输入流。在我的情况下,我只读取了请求的 header 以了解它是 Post 还是 Get 请求,因此在附加图像的情况下服务器无法响应请求,因为输入流没有被完全读取。