Member 14800672 Ответов: 1

Как сделать так, чтобы маршрут для web api .NET framework содержал '? и =' в url-адресе вместо просто '/' ?


теперь в URL - адресе я набираю:
localhost/api/controller/1/34.5/31.2/


но это то, чего я хочу.

localhost/api/controller?Id=1&num1=34.5&num2=31.2


Что я уже пробовал:

Right now this is my Route
<pre>
[HttpGet]
[Route("api/Controller/{Id}/{num1}/{num2}/", Name = "GetInfo")]

Maciej Los

Пожалуйста, прочтите это: Привязка параметров в Web API[^]

Member 14800672

Привет,

да я читал его но он ничего не уточняет

Вот URL-адрес, который я попробовал: https://localhost:****/api/Customer?Id=1&num1=1&num2=1.2/
но я получаю эту ошибку
Не было найдено ни одного HTTP ресурса, соответствующего URI запроса

Однако это работает, если я использую косую черту: https://localhost:****/по API/поддержки/идентификатор/1/поля num1/1.1/пит2/3.2/


Вот маршрут для моего метода:
[HttpGet]
[Маршрут("АПИ/поддержки/{ИД}/{num1 как}/{пит2}/", имя = "метод getcustomers")]
метод getcustomers публичных ihttpactionresult с(int идентификатор, двухместная поля num1, пит2 двойной)
{
}

А вот мой регистрационный метод:
общественная статический недействительным зарегистрироваться(HttpConfiguration конфиг)
{
// Конфигурация и сервисы веб-API

// Маршруты веб-API
конфиг.MapHttpAttributeRoutes();

конфиг.Маршруты.MapHttpRoute(
имя: "DefaultApi",
routeTemplate: "api/{controller}/{Id}/{num1}/{num2}",
по умолчанию: new {
Id = RouteParameter.Необязательный,
num1= RouteParameter.Необязательный,
num2= RouteParameter.Необязательный
}
);

}

1 Ответов

Рейтинг:
2

Richard Deeming

Маршрутизация атрибутов в ASP.NET Web API 2 | Microsoft Docs[^]

У вас есть один маршрут для вашего действия, который требует, чтобы все три параметра были переданы в URL-адресе. Когда вы помещаете параметры в строку запроса, этот маршрут больше не совпадает.

Если вы хотите передать значения в строке запроса вместо этого, измените свой маршрут на:

[HttpGet]
[Route("api/Customer", Name = "GetCustomers")]
public IHttpActionResult GetCustomers(int Id, double num1, double num2)
Если вы хотите поддерживать оба варианта, вы можете иметь несколько маршрутов для одного и того же действия, хотя они, очевидно, не могут иметь одно и то же имя:
[HttpGet]
[Route("api/Customer")]
[Route("api/Customer/{Id}/{num1}/{num2}/", Name = "GetCustomers")]
public IHttpActionResult GetCustomers(int Id, double num1, double num2)
NB: Если все действия в вашем контроллере имеют один и тот же префикс маршрута, вы можете использовать то RoutePrefix атрибут[^] вместо этого на вашем контроллере.
[RoutePrefix("api/Customer")]
public class CustomerApiController : ApiController
{
    [HttpGet]
    [Route("")]
    [Route("{Id}/{num1}/{num2}/", Name = "GetCustomers")]
    public IHttpActionResult GetCustomers(int Id, double num1, double num2)