#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, но попробуйте. 😉