从WebApi自定义方法返回BadRequest

时间:2018-09-05 14:22:32

标签: c# asp.net-core asp.net-core-webapi

在此处使用.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或从循环中退出。它只是继续到下一条语句。

我知道我退货时出现了一些问题,但找不到问题。

任何人都可以指出正确的处理方式吗?

1 个答案:

答案 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响应。