Возврат BadRequest из пользовательского метода WebApi - PullRequest
0 голосов
/ 05 сентября 2018

Использование .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);
 }
}

Выше я вызываю специальный метод в моем помощнике «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 голосов
/ 05 сентября 2018

Мое предложение - сгенерировать исключение из вашего класса 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.

...