Маршрутизация WebAPI сокращает подстановочный параметр на вопросительный знак
У меня есть маршрут в контроллере, который должен соответствовать всем в части URL и поместить его в строковый параметр.
Что у меня есть:
[Route("api/proxy/{proxyId}/{*parameter}")]
public Task<HttpResponseMessage> Mediate(int proxyId, string parameter)
и для неизвестного URL, например:
Я хотел бы, чтобы переменная "parameter" содержала:
тест? а = 1 & Ь = 2
Вместо этого он содержит:
тестовое задание
Как я могу указать маршрут, чтобы не вырезать все после вопросительного знака? Для этого конкретного случая я могу извлечь его из объекта Request.RequestUri, но это было бы.. не элегантно.
1 ответ
Тебе этого не сделать. По определению сегменты URL не включают строку запроса.
Тем не менее, вы можете сделать что-то действительно легко: внутри вашего контроллера WebApi у вас есть Request
свойство, которое содержит строку запроса:
Request.RequestUri.Query
Вы просто должны объединить параметр URL с этим, чтобы иметь то, что вам нужно. Это включает в себя ведущий знак вопроса:
Свойство Query содержит любую информацию запроса, включенную в URI. Информация о запросе отделяется от информации о пути знаком вопроса (?) И продолжается до конца URI. Возвращенная информация о запросе включает ведущий знак вопроса.
Если вы по-прежнему хотите, чтобы он работал по-другому, вам нужно будет включить свой собственный поставщик маршрутов, внедрить собственный IDirectRouteProvider и зарегистрировать его. Смотрите это: получите список шаблонов атрибутов маршрута asp.net webapi 2.2
Но делать что-то подобное неестественно. Почему все происходит по-другому, как стандартный способ, который все остальные люди понимают и используют?