ASP.NET Маршрутизация — с косой чертой в конце и без нее

#asp.net #wcf #asp.net-mvc-routing

#asp.net #wcf #asp.net-mvc-маршрутизация

Вопрос:

Учитывая следующий контракт на обслуживание:

 [WebGet(UriTemplate = "/stores")]
DTO.Stores GetAllStores();

[WebGet(UriTemplate = "/stores/{name}")]
DTO.Stores GetStores(string name);
  

Я могу получить доступ к этим двум URL:http://localhost/v1/stores и http://localhost/v1/stores/Joe . Однако URL http://localhost/v1/stores / (обратите внимание на косую черту в конце) возвращает мне ошибку «Конечная точка не найдена». В идеале я бы хотел http://localhost/v1/stores / для вызова GetAllStores().

Как я могу это сделать? Спасибо!

Ответ №1:

Я бы попробовал вставить тильду. Возможно, «~/stores»?

Или, при маршрутизации, уберите «/» в начале.

Ответ №2:

Что, если использовать «string? назовите «как параметр?

 [WebGet(UriTemplate = "/stores/{name}")]
DTO.Stores GetStores(string? name);
  

И поскольку оба ваших метода возвращают одно и то же (DTO.Stores), вы могли бы использовать один метод для получения хранилищ вместо двух (как вы делаете сейчас). Вот так:

 [WebGet(UriTemplate = "/stores/{name}")]
DTO.Stores GetStores(string? name)
{
    if(string.IsNullOrEmpty(name))
    {
        //get specific store
    }
    else
    {
        //get all stores
    }
}
  

PS: Я не уверен, что это будет хорошо работать с WCF, но попробуйте. 😉