我正在尝试从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,它们将引用异常类,然后将异常/错误详细信息绑定到该类。这样可以节省所有地方的代码更改。
对此有任何帮助!
答案 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; }
}