. Net Core Web API для возврата разных моделей данных разным клиентам - PullRequest
0 голосов
/ 13 июля 2020

У меня есть веб-API, разработанный на ядре. Net. Я хочу вернуть разные модели данных из одного и того же метода действия для разных клиентов.

Ответы [ 3 ]

1 голос
/ 13 июля 2020

Вы можете изменить результат действий на основе различных параметров, но клиенты будут странными, и я никогда не увижу кого-то или проект, которые бы это сделали, это усложнит отладку. Когда служба работает, она всегда должна демонстрировать ожидаемое поведение, мы должны знать, когда она успешна, она дает нам объект человека, когда она терпит неудачу, она возвращает сообщение об ошибке, изменение кадра для клиентов - худший сценарий. Лучшим способом удовлетворить это требование будет другой API, когда клиентам нужен другой результат, мы должны предоставить другой API, и эти отдельные API должны соответствовать вышеуказанному правилу.

0 голосов
/ 14 июля 2020

Вы можете вернуть любую модель из одной конечной точки, объявив тип возвращаемого значения как Task<IActionResult>.

Предположим, у вас есть CustomersController, поэтому конечная точка GET будет api/customers?clientType=client1. Теперь вам нужна другая информация о клиенте для другого на основе параметра clientType.

namespace walletapi.Controllers
{
    [ApiController]
    [Authorize]
    public class CustomersController : ControllerBase
    {
        public async Task<IActionResult> Get(string clientType)
        {
            if(clientType=="type1"){
               var type1Response = new CustomerInfoForClient1() {Property1="value1"};
               return Ok(type1Response );
            }
            if(clientType=="type2"){
               var type2Response = new CustomerInfoForClient2() {Property1="value2"};
               return Ok(type2Response);
            }
          return NotFound("client type is not found");

        }
    }
    public class CustomerInfoForClient1
    {
      public string Property1{get;set;}
    }

   public class CustomerInfoForClient2
   {
     public string Property3{get;set;}
   }
}
0 голосов
/ 13 июля 2020

Если вы не разрабатываете микросервисы, обычно не рекомендуется иметь несколько наборов результатов в одной конечной точке. Но если вам нужно, вы можете использовать IActionResult Type. С этим типом вам не нужно объявлять фиксированный возвращаемый тип. Вы можете использовать это так.

    [HttpGet("list/{clientType}")]
    [ProducesResponseType(StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status404NotFound)]
    public IActionResult ReturnSomeList(int clientType)
    {
        var firstList = new List<string>();
        for (int i = 0; i < 3; i++)
        {
            firstList.Add($"str {i}");
        }

        var secondList = new List<int>();
        for (int i = 0; i < 5; i++)
        {
            secondList.Add(i);
        }

        if (clientType == 0)
        {
            return Ok(firstList);
        }

        if (clientType == 1)
        {
            return Ok(secondList);
        }

        return NotFound("Can not find something");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...