这段代码可以拉出到一个单独的方法中吗?

Can this code be pulled out into a separate method?

下面显示的整个 try-catch 块 可以拉出到一个方法中吗?

我的老板让我做,但我觉得我错过了什么,因为我认为它不能被拉出来(没有太多的复杂性,因为里面有 return Ok(response); 行) .我不想在不确定的情况下拒绝他

[Authorize]
[HttpPost("endpoint123")]
public async Task<ActionResult> Endpoint123(Data data)
{
    ResponseObject response = new ResponseObject
    {
        Success = false,
        ErrorMessage = "",
        UserAdded = false
    };

    try
    {
        var e = await Request111(data); // this can throw exception
        if (e.result != -1)
        {   
            var success = await Request222(data); // this can throw exception
            if (!success)
            {
                response.ErrorMessage += "errorMessage123";
                // _loggingService is a global variable
                _loggingService.Log(LogLevel.Error, Priority.High, "Error happened");
                return Ok(response); // <-- Notice this returns ok response
            }
        }
        response.Success = true;
    }
    catch (Exception ex)
    {
        response.ErrorMessage += ex.Message;
        _loggingService.Log(LogLevel.Error, Priority.High, "Error happened");
        response.Success = false;
    }
    
    response.UserAdded = true;
    return Ok(response);
}

可以吗? 当然。

[Authorize]
[HttpPost("endpoint123")]
public async Task<ActionResult> Endpoint123(Data data)
{
    var response = await Logic(data);
    return Ok(response);
}

Logic() 的实现并不过分困难。 在真实的 API 中,我不确定将每个结果 return 设为 200 OK 是否有意义,但该选择已经做出。 请注意,要提取它,Logic() 方法总是 returns a Task<ResponseObject>.

此外,如果您只想退出 try,只需 return 方法中的 ResponseObject 然后在调用站点用 Ok() 将其包装起来就很容易。