4

.NET (C#) で HttpListener を使用して REST API を作成中です。わずかな問題を除いて、これはすべてうまくいきます。

ResourceNotFound (404) など、OK (200) 以外のステータス コードで応答を返そうとしています。

HttpListenerResponse の StatusCode を 200 以外に設定し、(HttpListenerResponse.OutputStream を使用して) 応答本文を作成すると、ステータス コードが 200 にリセットされているようです。StatusCode 404 で応答を送信できず、メッセージ本文。ただし、これは HTTP 仕様に従って可能である必要があります。Fiddler でリクエストとレスポンスを確認していますが、探しているものが取得できません。

4

1 に答える 1

6

私は同じ問題を抱えていて、問題の原因を見つけました:

OutputStream before set StatusCode(またはその他のプロパティ) にbody を書き込むと、変更が適用される前に応答が送信されます。

したがって、次の順序で進める必要があります。

public void Send(HttpListenerContext context, byte[] body)
{
    // First, set a random status code and other stuffs
    context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
    context.Response.ContentType = "text/plain";

    // Write to the stream IN LAST (will send request)
    context.Response.OutputStream.Write(body, 0, body.Length);
}
于 2015-06-03T14:06:31.127 に答える