вызов метода в контроллере webapi .net core передача строки в uri не работает - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь вызвать метод в webapiController (ядро .net) из моего теста

Если у моего объекта запроса есть Id в виде строки, он не работает, как int это делает

Что я делаю не так в моем тестовом образце?

    [Fact]
    public async Task WhyDoesNotWorkWithIdAsString()
    {
        string thisQueryDoesNotWork = "http://localhost:1111/api/v1/shop/customers?id=1";
        string thisQueryWorksProvidedTheIdIsAnInt = "http://localhost:1111/api/v1/shop/customers/1";
        var response = await client.GetAsync(thisQueryDoesNotWork);
        var response2 = await client.GetAsync(thisQueryWorksProvidedTheIdIsAnInt);

        //omitted asserts
    }


[Route("api/[controller]")]
public class ShopController: Controller
{

    [HttpGet]
    [Route("{id}",Name ="GetCustomerAsync")]
    [ProducesResponseType(typeof(GetCustomerResponse), (int)HttpStatusCode.OK)]
            //more ProducesResponseType omitted
    public async Task<IActionResult> GetCustomerAsync([FromQuery]GetCustomerRequest request)
    {
        //code omitted
    }
}


public class GetCustomerRequest
{
    Required]
    public string Id { get; set; }
    // public int Id { get; set; }   //works with int but not with a string

}

}

Также ниже правильно

[FromQuery] = использовать Получить только [FromBody] = использовать Put-Post

есть ли ссылка с объяснением, когда использовать этот параметр привязки?

большое спасибо

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

В

[Route("{id}",Name ="GetCustomerAsync")]

{id} параметр шаблона является частью маршрута, но в параметре действия он запрашивается через [FromQuery], поэтому он не совпадает.

Ожидается

http://localhost:1111/api/v1/shop/customers/1

Но вы отправляете

http://localhost:1111/api/v1/shop/customers?id=1

, поэтому вторая ссылка работает, а первая - нет.

Ссылка Маршрутизация к действиям контроллера

Что касается заботы о [From*] атрибутах

[FromHeader], [FromQuery], [FromRoute], [FromForm]: Используйте их, чтобы указать точный источник привязки, который вы хотите применить.
...
[FromBody]: использовать настроенные средства форматирования для привязки данных из тела запроса. Форматер выбирается в зависимости от типа содержимого запроса.

Ссылка Связывание модели в ASP.NET Core

0 голосов
/ 06 мая 2018

Я выяснил, в чем проблема, имя httpget или маршрута должно совпадать с тем, которое вы установили в ссылке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...