#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();
.