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.Http 및 System.Net 을 참조하십시오 .