3

.NET (C#)의 HttpListener를 사용하여 REST API를 만드는 중입니다. 이것은 하나의 사소한 문제를 제외하고는 모두 훌륭합니다.HttpListener/HttpListenerResponse를 사용하여 오류 페이지를 반환하는 방법

예를 들어 ResourceNotFound (404)와 같은 OK (200) 이외의 상태 코드로 응답을 보내려고합니다.

HttpListenerResponse의 StatusCode를 200 이외의 값으로 설정하고 HttpListenerResponse.OutputStream을 사용하여 응답 본문을 만들면 상태 코드가 200으로 재설정되는 것 같습니다. 응답을 보낼 수 없습니다. StatusCode (404) 및 메시지 본문과 함께. 그러나 이것은 HTTP 스펙에 따라 가능해야합니다. Fiddler와의 요청 및 응답을 확인하고 있지만 원하는 내용을 얻을 수 없습니다.

저도 같은 문제가 있었하고 문제의 원인을 발견했습니다
+0

. 반환 된 상태 코드가 '200'(OK)이면 내용 본문이 비어있는 것 같습니다. – MvdV

답변

1

: 사용자가 설정 한 OutputStream이전에 몸을 쓰는 경우 StatusCode (또는 다른 속성), 응답이 을 전송됩니다

전에 수정이 적용됩니다!

그래서, 당신은이 순서대로 진행해야한다 : 나는 자원을 만들 때 '201'을 반환과 같은 문제가 발생하고있어

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); 
}