在webApi2中,我可以通过继承IHttpActionResult来编写自定义ActionResult.
样品:
public class MenivaActionResult : IHttpActionResult
{
private readonly HttpRequestMessage _request;
private readonly ServiceResponseBase _response;
public MenivaActionResult(HttpRequestMessage request, ServiceResponseBase response)
{
_request = request;
_response = response;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken token)
{
HttpResponseMessage httpresponseMessage = _response.Exception != null
? _request.CreateErrorResponse((HttpStatusCode)_response.HttpCode,
_response.Exception.Message+":"+_response.Exception.HelpCode)
: _request.CreateResponse((HttpStatusCode)_response.HttpCode, _response.Data);
return Task.FromResult(httpresponseMessage);
}
}
Run Code Online (Sandbox Code Playgroud)
ServiceResponseBase类对象包含来自服务层的所有异常和数据.
我如何将此代码移植到asp.net核心.我试过,但我不知道如何从 .net核心中的HttpRequestMessage对象创建响应消息.该IActionResult只有Task ExecuteResultAsync(ActionContext context)方法.我怎么能修改这个方法的响应
我有一个控制器一个动作.在这个动作方法中,我有一个async我调用的方法,就是这样.这是我正在使用的代码:
[HttpGet]
public Task<MyObject> Get()
{
return _task.GetMyObject()
}
Run Code Online (Sandbox Code Playgroud)
这正确地序列化为我期望的JSON.现在我的经理坚持要将签名更改为以下内容:
[HttpGet]
public async Task<IActionResult> Get()
{
var data = await_task.GetMyObject();
return Ok(data);
}
Run Code Online (Sandbox Code Playgroud)
我相信没有理由将代码await放在控制器中并且可以返回,Task因为事后没有任何东西取决于结果.除了为此完成的额外代码生成(创建状态机等)之外await,从WebApi这些方法的角度来看是否有任何影响?为了澄清,我想知道返回a IActionResult是否比仅返回更好Task<MyObject>似乎结果是相同的.