В asp.net API HttpGet{id} работает, но когда я меняю {id} на что-то другое, это не работает

#api #asp.net-core #asp.net-core-webapi

#API #asp.net-ядро #asp.net-ядро-webapi

Вопрос:

Я довольно новичок в ASP core WebAPI. Надеюсь, вы, ребята, сможете мне помочь.

Я успешно использую HttpGet{id} — postman отправляет обратно правильную информацию. Тем не менее, я хочу иметь возможность использовать «Номер партнера» в URL-адресе.

ниже приведен рабочий метод получения идентификатора:

 '''
    [HttpGet("{id}")]
     public async Task<ActionResult<Model>> GetModel(int id)
        {
        return await _context.Models.FindAsync(id);
        }
'''
 

Вот фактические параметры, по которым я хотел бы выполнить поиск:

 ```

[HttpGet("{PartNumber}")]
        public async Task<ActionResult<Model>> GetModel(int partNumber)
        {
          return await _context.Models.FindAsync(partNumber);
        }
        
```
 

Почтальон возвращает 404, не найденных в последнем, когда я должен увидеть возвращенные данные.

Любая помощь была бы очень признательна. Спасибо

Ответ №1:

 [HttpGet("{partNumber}")]
    public async Task<ActionResult<Model>> GetModel(int partNumber)
    {
      return await _context.Models.FindAsync(partNumber);
    }
 

Оболочка строки в маршруте должна соответствовать параметру

Ответ №2:

404 означает, что URL-адрес запроса неверен.

Вот весь мой внутренний код, и мой контроллер содержит [Route("api/[controller]")] атрибут:

 [Route("api/[controller]")]
[ApiController]
public class TestsController : ControllerBase
{
    [HttpGet("{partNumber}")]
    public async Task<ActionResult<Model>> GetModel(int partNumber)
    {

    }
}
 

URL-адрес запроса должен быть: https://localhost:44371/api/tests/YourPortNumber (https://localhost:44371/api/tests/1 ).

Результат:

введите описание изображения здесь

Для возврата содержимого в postman, пожалуйста, установите точку останова и проверьте, содержит ли база данных такую запись с конкретным номером партнера:

  [HttpGet("{partNumber}")]
public async Task<ActionResult<Model>> GetModel(int partNumber)
{
      //set breakpoint here...
      var data = await _context.Models.FindAsync(partNumber);
      return await _context.Models.FindAsync(partNumber);
}
 

Результат:

введите описание изображения здесь

Комментарии:

1. Спасибо за ваш комментарий. Я могу подняться туда, где вы находитесь выше, поэтому PartNumber содержит правильное значение url, но строка возврата не возвращает значения обратно в postman. Есть идеи, почему это может быть?

2. Вы имеете return await _context.Models.FindAsync(partNumber); в виду, не возвращает значение обратно? Вам нужно установить точку останова и проверить, имеет ли она значение. Добавьте var data= await _context.Models.FindAsync(partNumber); и проверьте, есть ли данные. Если мой ответ вам помог, пожалуйста, примите его как ответ. Спасибо ~

3. Я прав, думая: в вашем примере вы все еще ищете данные по идентификатору? Вместо этого я хочу выполнить поиск своих данных по столбцу в именах моей базы данных «PartNumber». Можно ли это сделать? У меня есть столбец с именем PartNumber, в одной из строк он имеет значение 1724340. Я вижу это в своей базе данных. Когда я устанавливаю точку останова, я вижу, что номер партнера (1724340) передается в метод, но переменная «data» показывает null.

4. Привет @Gavin, потому что метод FindAsync получает значение для id, если номер партнера не является вашим идентификатором, вам нужно попробовать : var data = _context.Models.Where(a => a.PartNumber== partNumber).ToList(); .