Есть еще проблемы с вашим кодом, поэтому я постараюсь объяснить их шаг за шагом.
1. Исходя из предоставленного вами кода, вы, должно быть, украсили свой контроллер таким маршрутом, как
[RoutePrefix("api/appointments")]
для правильного вызова метода BookAppointment.Если вы украсите свой контроллер этим атрибутом, тогда вы можете просто вызвать
http://localhost/api/appointments/BookAppointment/testemail@domain.com/1
, и метод будет вызван на 100%.
2. Следующий код:
var baseurl = '@ConfigurationManager.AppSettings["baseAddress"]' + 'api/Appointments/BookAppointment';
// + encodeURIComponent(email) + '/' + docid;
переводится во что-то вроде
http://localhost/api/Appointments/BookAppointment
, поэтому необходимая часть (адрес электронной почты / идентификатор) не указана (поэтому выдается сообщение об ошибке).
3. Код JavaScript делаетPOST с JSON в теле, но ваш API не принимает тело JSON.Я рекомендую вам создать отдельный класс, подобный этому:
public class BookAppointmentRequest
{
public string Email { get; set; }
public int ID { get; set; }
}
И после этого вы модифицируете метод, чтобы указать, что вы принимаете данные из тела.
[HttpPost, Route("BookAppointment")]
public HttpResponseMessage BookAppointment([FromBody] BookAppointmentRequest request)
После этого вы можете просто сделать POST для api / Appointments / BookAppointment с JSON из вашего кода JavaScript.
Я рекомендую вам использовать IHttpActionResult вместо HttpResponseMessage.См.
эту ссылку.