在此处使用.net核心Web API。
我的api中有一个端点:
[HttpPost("data")]
public async Task<IActionResult> PostData(List<string> udata)
{
JArray sets = new JArray();
try
{
sets = Helper.GetData(udata);
}
catch (Exception e)
{
return StatusCode(500, e.Message);
}
}
在上面,我在助手“ GetData”中调用一个自定义方法,该方法执行所有处理和计算。为了使Api控制器干净,我将所有处理移到了此辅助方法。
下面是我的助手课:
public static class Helper
{
public static BadRequestObjectResult GetMessage(string message)
{
return new BadRequestObjectResult(message);
}
public static JArray GetData(List<string> udata)
{
if(udata == null)
return GetMessage("Data is null");
//do some processing and calclulations here
//return BadRequest if some issue
}
}
如果存在一些处理问题,或者某些数据与预期不符,或者其他一些问题,我想抛出BadRequest。为此,我制作了一个自定义方法“ BadRequestObjectResult”。
现在我的问题是,如果GetData中有问题,它不会返回到我的api或从循环中退出。它只是继续到下一条语句。
我知道我退货时出现了一些问题,但找不到问题。
任何人都可以指出正确的处理方式吗?
答案 0 :(得分:2)
我的建议是从Helper类中引发异常,并从PostData方法中处理该异常。例如...
您可以抛出ArgumentException并从您的API方法中显式捕获它。
public static class Helper
{
public static JArray GetData(List<string> udata)
{
if(udata == null)
throw new ArgumentException("Data is null");
//do some processing and calclulations here
//throw ArgumentException if there is an issue
}
}
[HttpPost("data")]
public async Task<IActionResult> PostData(List<string> udata)
{
JArray sets = new JArray();
try
{
sets = Helper.GetData(udata);
return Ok(sets);
}
catch (ArgumentException e)
{
return BadRequest(e.Message);
}
}
这样,您可以只担心控制器返回的代码,而Helper方法仅与输入有关,而不会返回专门针对控制器的东西。如果您想在其他地方使用Helper类,则这种方式会更加灵活。
这也将满足您在遇到不良结果时停止处理的要求,因此一旦遇到不良结果,结果集就会被丢弃,并发出BadRequest响应。