use*_*677 1 c# asp.net-core asp.net-core-webapi
在这里使用 .net core 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);
}
}
Run Code Online (Sandbox Code Playgroud)
在上面,我在我的助手“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
}
}
Run Code Online (Sandbox Code Playgroud)
如果存在一些处理问题或某些数据不符合预期或其他一些问题,我想抛出 BadRequest。为此,我创建了一个自定义方法来执行“BadRequestObjectResult”。
现在我的问题是,如果 GetData 中存在问题,它不会返回到我的 api 或退出我的循环。它只是继续下一个语句。
我知道通过我返回这个的方式存在一些问题,但无法找到问题。
任何人都可以指出处理这个问题的正确方法吗?
小智 5
我的建议是从您的 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以只关心控制器的返回代码,而你的 Helper 方法只关心输入,而不是返回一些专门用于控制器的东西。如果您想在其他地方使用 Helper 类,那么这种方式会更灵活一些。
这也将满足您在遇到错误结果时停止处理的要求,因此一旦遇到错误结果,结果集就会被丢弃并发出 BadRequest 响应。
| 归档时间: |
|
| 查看次数: |
5940 次 |
| 最近记录: |