Запрос соответствует слишком многим конечным точкам для двух Web Apis в net core 3.0 - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть решение, созданное в .net core 3.0

В решении есть 2 проекта, каждый из которых представляет собой веб-интерфейс.

Позволяет вызывать веб-API A со следующим контроллером:

[Produces("application/json")]
[Route("")]
public class DummyPersonController : ControllerBase
{
    [HttpPost("persons")]
    public async Task<bool> Send([FromBody] Domain.Person person)
    {

        var result = await _personManager.Send(person);

        return result;
    }
}

Этот webApi работает на локальном хосте, скажем, через порт 5001.

Затем я запускаю на другом VS2019 то же решение, но я запускаю другой веб-API, B, скажем,он работает через порт 6000

Контроллер выглядит следующим образом:

[Route("")]
[ApiController]
public class PersonController : ControllerBase
{
    [HttpPost("persons")]
    public async Task<IList<Domain.Person>> SendPerson(PersonRequest personRequest)
    {
        return new List<Domain.Person> { new Domain.Person() };
    }
}

Если я использую Postman для создания POST до https://localhost:5001/persons, то очевидно, что существует более одногоместо, где запрос может приземлиться, но меня беспокоит то, что это два разных порта.

Как я могу принять во внимание порты, когда я делаю POST до /persons?

Ответы [ 3 ]

0 голосов
/ 07 ноября 2019

Когда вы звоните https://localhost:5001/persons, вы всегда называете Web Api «A», потому что вы указали порт.

Если вы позвонили https://localhost/persons, то IIS или любой другой веб-хостинг, который вы используете, посмотрел бы, было ли приложение привязано к порту 443, так как вы передаете запрос https и маршрутизируете трафик на него. application.

Аналогично, если вы позвонили http://localhost/persons, то IIS или любой другой веб-хост, который вы используете, посмотрел бы, не было ли приложение привязано к порту 80, так как вы передаете простой http-запрос и маршруттрафик к этому приложению.

В ваших случаях у вас есть 2 приложения, связанные с отдельными портами, и нет никакой двусмысленности относительно того, какое приложение будет вызываться при указании портов в почтальоне.

Если вынеобходимо переключить порты при вызове этих API, тогда вам нужно будет установить порт в коде вашего клиента во время выполнения вызова. Если вы не указали порт, то ваш веб-хост будет решать, какое приложение получит трафик в зависимости от того, какое приложение вы привязали к порту 443.

0 голосов
/ 07 ноября 2019

В этом случае проблема заключалась в том, что Web Api B зависел от Web Api A, я сделал это для того, чтобы использовать тот же Domain classes, что было бы хорошей идеей, чтобы они были вдругой проект. В любом случае, когда вы запускаете Web Api с зависимостью, он также запускает другой контроллер, и это вызывает проблему.

0 голосов
/ 07 ноября 2019

Каждый класс Networking имеет поле или свойство для номера порта. Если номер не указан, номер порта по умолчанию подразумевается на основе протокола. Вот где этот список входит.

Более того, URL Shema позволяет вам объявить порт, который будет использоваться, как часть хост-части URL (то же правило для значений по умолчанию):

http://localhost:3000/

Это запросит локальный хост на порту 3000, а не 80 (по умолчанию для http установлено 80, с откатами 8080 и 8008. По умолчанию HTTPS - 443).

Так что это немного зависит от классов, которые вы получили, и от того, сколько URL вы пишете и / или храните.

...