【问题标题】:Sending Proper Response from web api从 web api 发送正确的响应
【发布时间】:2019-09-27 09:22:56
【问题描述】:

我正在尝试从 Web API 发送正确的响应,即如果有任何错误发送错误,则发送内容。其代码流程如下。

 [HttpPost]
        public IActionResult GetInfo([FromBody] InfoModel info)
        {
            try
            {
                var result = new Info().ProcessInfoResponse(info);
                if (result==null)
                    return BadRequest();
                else
                    return Ok(result);

            }
            catch (Exception e)
            {
                Log.Error("some exception", e);
                return StatusCode(500, e.Message);
            }
        }

从中间层,即 Info 类,我们有不同的方法,有自己的返回类型,从这里我们调用另一个类中的第三方 API。

public InfoResponse ProcessInfoResponse(InfoModel info)
{
    try
        {
            var result = serviceLayer.Post<InfoModel>(info);

            if (result != null)
            {
               // Do Something
            }
            else
            {
                Log.Error("some error");
                return null;
            }
        }
        catch (Exception ex)
        {
            Log.Error("some error");
            return null;
        }
}

public InfoRequest ProcessInfoRequest()
{

}

在服务层,我们调用第三方 api,如下所示

public HttpResponseMessage Post<T>(T parm) where T : class
        {
            try
            {
                _client.DefaultRequestHeaders.Clear();

                var postTask = _client.PostAsync("some third party url", Serialize<T>(parm));
                postTask.Wait();

                if (postTask.Result.IsSuccessStatusCode)
                {
                    return postTask.Result;
                }
                else
                {
                    Log.Error("some error in service layer");
                }
            }
            catch (Exception ex)
            {
                Log.Error("some error in service layer");
            }

            return default(HttpResponseMessage);
        }

所以我的问题是如果有异常/错误,如何返回异常/错误,如果没有异常/错误,则按原样发送响应。这可以通过保持中间层返回类型原样来实现

现在,如果没有错误,那么我可以正确发送响应,因为我的中间层正在获取预期的返回类型。

问题是我的中间层方法有自己的返回类型,这导致我按原样发送异常/错误。因为我无法将它映射到正确的类或同一类。

我想在所有返回的类/类型下添加新的属性,这些类/类型将引用异常类,然后将异常/错误详细信息绑定到该类。这将节省在所有地方进行大量代码更改。

对此的任何帮助表示赞赏!

【问题讨论】:

    标签: c# asp.net-web-api asp.net-core asp.net-web-api2


    【解决方案1】:

    为什么不创建一个自定义响应对象,以便:

    public IActionResult<MyCustomResponseObject> GetInfo([FromBody] InfoModel info)
    
    public class MyCustomResponseObject
    {
        public string Message { get; set; }
        public object Content { get; set; }
        public enum State { get; set; }
    }
    

    【讨论】:

    • 所以你是说我需要从所有方法中返回 MyCustomResponseObject ?
    • 是的。这是我使用过的一种策略,它使 API 使用统一且易于实现。
    • 是的,但是我们已经在多个中间层类中通过单个接口实现了这些方法。所以这将导致大量的代码更改。其中方法具有不同的返回类型。
    • 好的,但您不是在问如何返回内容和/或错误响应吗?如果是这样,除了有一个可以容纳这些值的返回模型之外别无他法。
    • 是的,我问的是同样的事情,为了避免大量代码更改,我可以在所有返回类型中添加特定的异常类作为属性或通过继承它。我猜这是有道理的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多