#asp.net-core-2.2
#asp.net-core-2.2
Вопрос:
Здравствуйте, я работаю над asp.net веб-api ядра 2.2, мой запрос get работает нормально, но у меня возникла проблема с запросом HTTPDELETE, мой код для запроса на удаление выглядит следующим образом
[Route("api/[controller]")]
[ApiController]
public class PatientController : ControllerBase
{
IPatientManager _patientManager;
IEnumerable<Patient> patientList;
public PatientController(IPatientManager patientManager)
{
_patientManager = patientManager;
}
[HttpGet]
public IEnumerable<Patient> Get()
{
return (patientList = _patientManager.GetAllPatients());
}
// DELETE api/values/5
[HttpDelete("api/Patient/{id}")]
public bool Delete(long id)
{
if (_patientManager.DeletePatient(id))
return true;
else
return false;
}
}
}
когда я помещаю запрос в URL как localhost: 3, n922 / api / Patient / 444373, он выдает HTTP ОШИБКУ 404, мой файл startup.cs использует приведенный ниже код для MapRoute
app.UseMvc(opt =>
{
opt.MapRoute("Default",
"{controller=Patient}/{action=Get}/{id?}");
});
чтобы запустить мой PatientController вместо ValuesController, пожалуйста, помогите, в чем проблема, когда я делаю неправильно? TIA
Ответ №1:
У вас есть префикс маршрута, определенный на вашем контроллере как api/[controller]
, что переводится как /api/Patient
. Затем ваш маршрут для вашего действия определяется как api/Patient/{id}
, что составляет весь маршрут к этому действию: /api/Patient/api/Patient/{id}
. Это, очевидно, неправильно и является источником вашего 404. Измените маршрут на просто {id}
.
[HttpDelete("{id}")]
public bool Delete(long id)
Комментарии:
1. Извините, но у меня это тоже не работает, когда я отправляю запрос как / api / patient / 5, он выдает ошибку 405: (в браузере