从网络发送正确的响应 api
Sending Proper Response from web api
我正在尝试从 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 class 我们有不同的方法和自己的 returning 类型,从这里我们调用第三方 API另一个 class.
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);
}
所以我的问题是 return exceptions/errors 如果有,如果没有 exceptions/error 如何发送响应。这可以通过保持中间层 return 类型不变
来实现
现在,如果没有错误,我就可以正确发送响应,因为我的中间层正在获得预期的 returning 类型。
问题是我的中间层方法有自己的 returning 类型,这导致我按原样发送 exception/error。因为我无法将其映射到正确的 class 或相同的 class.
我想在所有 returning classes/types 下添加新的 属性 ,这将引用异常 class,然后将绑定 exception/error class 的详细信息。这将节省在所有地方进行大量代码更改。
感谢任何帮助!
为什么不创建自定义响应对象以便:
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; }
}
我正在尝试从 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 class 我们有不同的方法和自己的 returning 类型,从这里我们调用第三方 API另一个 class.
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);
}
所以我的问题是 return exceptions/errors 如果有,如果没有 exceptions/error 如何发送响应。这可以通过保持中间层 return 类型不变
来实现现在,如果没有错误,我就可以正确发送响应,因为我的中间层正在获得预期的 returning 类型。
问题是我的中间层方法有自己的 returning 类型,这导致我按原样发送 exception/error。因为我无法将其映射到正确的 class 或相同的 class.
我想在所有 returning classes/types 下添加新的 属性 ,这将引用异常 class,然后将绑定 exception/error class 的详细信息。这将节省在所有地方进行大量代码更改。
感谢任何帮助!
为什么不创建自定义响应对象以便:
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; }
}