WCF 웹 API 코드에서 "찾을 수 없음"에 대한 올바른 HTTP 오류 코드를 반환하는 데 문제가 있습니다. 여기에 나는 또한 로깅 핸들러가WCF webapi에서 HTTP 대신 HTTP 500 받기
[WebInvoke(Method = "GET", UriTemplate = "{id}")]
[RequireAuthorisation]
public Customer GetCustomer(int id)
{
var customer = Repository.Find(id);
if (customer == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return customer;
}
내 API 방법 ... ...
protected override bool OnTryProvideResponse(Exception exception, ref HttpResponseMessage message)
{
if (exception != null)
{
var msg = "Request failed.";
_logger.Error(exception, msg);
}
message = new HttpResponseMessage
{
StatusCode = HttpStatusCode.InternalServerError
};
return true;
}
은 무엇 일어나고있는 것은 나는 다음과 같은 예외를 얻고있다는 ...이다
HttpResponseException
"The response message returned by the Response property of this exception should be immediately returned to the client. No further handling of the request message is required."
... 내 로깅 처리기가 응답 상태 코드를 선택하여 응답 상태 코드를 500으로 변경합니다.
따라서 fe w 블로그 게시물 및 답변을 so, this로 변경했습니다.
if (customer == null)
{
WebOperationContext.Current.OutgoingResponse.SetStatusAsNotFound();
return null;
}
...하지만 지금은 200입니다. 분명히 잘못되었습니다.
그래서 올바른 방법은 무엇입니까? 그것은 마치 HttpResponseException 던지기가 작동하지 않고 코드가 실행 된 것처럼 보입니다.
감사를하는 데 도움이됩니다. 나는 단지 같은 결론에 도달했다. 난 그냥 HttpResponseExceptions 무시해야합니다 :). WebOperationContext의 사용에 관해서는 올바른 결과를 얻으려면 조작 핸들러에서 사용해야한다는 것을 알았습니다. 그게 합리적이라고 생각하니? 그렇지 않다면 그 주제에 대해 다른 질문을 게시 할 것입니다. –
op 처리기에서 무엇을 사용하고 있습니까? –