[C#] 비 OK 응답에 대해 IHttpActionResult를 사용하여 컨텐츠 리턴

Web API 2 컨트롤러에서 돌아 오는 경우 다음과 같이 응답이 정상이면 (상태 200) 응답이 포함 된 콘텐츠를 반환 할 수 있습니다.

    public IHttpActionResult Get()
    {
        string myResult = ...
        return Ok(myResult);
    }

가능한 경우 여기에 기본 제공 결과 형식을 사용하고 싶습니다. https://msdn.microsoft.com/en-us/library/system.web.http.results(v=vs.118).aspx

내 질문은 다른 유형의 응답 (200이 아닌)에 대해 어떻게 메시지 (문자열)를 반환 할 수 있습니까? 예를 들어, 나는 이것을 할 수 있습니다 :

    public IHttpActionResult Get()
    {
       return InternalServerError();
    }

그러나 이것은 아닙니다 :

    public IHttpActionResult Get()
    {
       return InternalServerError("Message describing the error here");
    }

이상적으로는 IHttpActionResult 구현으로 메시지를 다시 보낼 수 있도록 이것을 일반화하고 싶습니다.

이 작업을 수행해야하며 자체 응답 메시지를 작성해야합니다.

    public IHttpActionResult Get()
    {
       HttpResponseMessage responseMessage = ...
       return ResponseMessage(responseMessage);
    }

아니면 더 좋은 방법이 있습니까?



답변

이것을 사용할 수 있습니다 :

return Content(HttpStatusCode.BadRequest, "Any object");


답변

HttpRequestMessagesExtensions.CreateErrorResponse ( System.Net.Http네임 스페이스)를 다음과 같이 사용할 수 있습니다 .

public IHttpActionResult Get()
{
   return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Message describing the error here"));
}

웹 API의 컨텐츠 협상을 이용하려면 요청을 기반으로 응답을 작성하는 것이 좋습니다.


답변

나는 다음 해결책을 찾았다.

public class HttpActionResult : IHttpActionResult
{
    private readonly string _message;
    private readonly HttpStatusCode _statusCode;

    public HttpActionResult(HttpStatusCode statusCode, string message)
    {
        _statusCode = statusCode;
        _message = message;
    }

    public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
    {
        HttpResponseMessage response = new HttpResponseMessage(_statusCode)
        {
            Content = new StringContent(_message)
        };
        return Task.FromResult(response);
    }
}

… 다음과 같이 사용할 수 있습니다.

public IHttpActionResult Get()
{
   return new HttpActionResult(HttpStatusCode.InternalServerError, "error message"); // can use any HTTP status code
}

개선을위한 제안을 받고 있습니다. 🙂


답변

당신은 또한 할 수 있습니다 :

return InternalServerError(new Exception("SOME CUSTOM MESSAGE"));


답변

ResponseMessage를 반환하여 상태 코드가있는 것을 반환하는 데 관심이있는 사람 :

//CreateResponse(HttpStatusCode, T value)
return ResponseMessage(Request.CreateResponse(HttpStatusCode.XX, object));


답변

ASP.NET Web API 2에서는 ResponseMessageResultResponseMessage 에서 아무 것도 랩핑 할 수 있습니다 .

public IHttpActionResult Get()
{
   HttpResponseMessage responseMessage = ...
   return new ResponseMessageResult(responseMessage);
}

경우에 따라 원하는 결과를 얻는 가장 간단한 방법 일 수도 있지만 일반적으로 System.Web.Http.Results 의 다양한 결과를 사용하는 것이 좋습니다 .


답변

단순한:

return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Your message"));

System.Net.HttpSystem.Net 을 참조하십시오 .