对于从Web API 2控制器返回,如果响应是OK(状态200),我可以返回内容与响应:
public IHttpActionResult Get()
{
string myResult = ...
return Ok(myResult);
}
如果可能的话,我希望在这里尽可能使用内置结果类型
我的问题是,对于另一种类型的响应(不是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);
}
还是有更好的办法?
我也有同样的问题。我想为我的api控制器创建自定义结果,像这样调用它们
return Ok("some text");
然后我这样做了:
1)使用singletone创建自定义结果类型
public sealed class EmptyResult : IHttpActionResult
{
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
return Task.FromResult(new HttpResponseMessage(System.Net.HttpStatusCode.NoContent) { Content = new StringContent("Empty result") });
}
}
2)使用new方法创建自定义控制器:
public class CustomApiController : ApiController
{
public IHttpActionResult EmptyResult()
{
return new EmptyResult();
}
}
然后我可以在我的控制器中调用它们,像这样:
public IHttpActionResult SomeMethod()
{
return EmptyResult();
}
一个更详细的示例,支持在c# HttpStatusCode中未定义的HTTP代码。
public class MyController : ApiController
{
public IHttpActionResult Get()
{
HttpStatusCode codeNotDefined = (HttpStatusCode)429;
return Content(codeNotDefined, "message to be sent in response body");
}
}
Content是在抽象类ApiController(控制器的基类)中定义的虚方法。声明如下:
protected internal virtual NegotiatedContentResult<T> Content<T>(HttpStatusCode statusCode, T value);