从Web API发送正确的响应

时间:2019-05-09 13:59:23

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

我正在尝试从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);
        }

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

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

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

我当时想在所有返回的类/类型下添加新的Property,它们将引用异常类,然后将异常/错误详细信息绑定到该类。这样可以节省所有地方的代码更改。

对此有任何帮助!

1 个答案:

答案 0 :(得分: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; }
}