相关疑难解决方法(0)

如何在asp.net核心中编写自定义actionResult

在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)方法.我怎么能修改这个方法的响应

c# asp.net .net-core asp.net-core

16
推荐指数
1
解决办法
1万
查看次数

async Task <IActionResult> vs Task <T>

我有一个控制器一个动作.在这个动作方法中,我有一个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>似乎结果是相同的.

c# asp.net-mvc asp.net-core

7
推荐指数
2
解决办法
5491
查看次数

标签 统计

asp.net-core ×2

c# ×2

.net-core ×1

asp.net ×1

asp.net-mvc ×1