Поэтому я уже давно пытаюсь получить эту работу. Позвольте мне объяснить это требование. Мне нужно написать WebAPI, который будет принимать XML-код, посмотреть на него и вернуть ответ.
Я новичок в этом, поэтому попросил помощи. Было предложено создать пользовательский объект, представляющий входящий XML, и использовать этот объект в качестве параметра для метода, который был открыт WebAPI. Результатом будет класс, который не является проблемой.
Вот шаги.
Создал пустой проект WebAPI. Добавлен класс, представляющий входящий XML.
Входящий XML:
<InComingStudent>
<StudentID>10</StudentID>
<Batch>56</Batch>
</InComingStudent>
Класс:
public class InComingStudent
{
public string StudentID { get; set; }
public string Batch { get; set; }
}
Возвращаемый объект этого типа:
public class StudentResult
{
public string StudentID { get; set; }
public string Batch { get; set; }
public string Score { get; set; }
}
Добавлен контроллер учащихся с помощью этого метода:
public class StudentsController : ApiController
{
[HttpPost]
public StudentResult StudentStatus(InComingStudent inComingStudent)
{
ProcessStudent po = new ProcessStudent();
StudentResult studentResult = po.ProcessStudent();
return StudentResult;
}
}
Отказались от службы. Он открыт в новом браузере с 404. Это нормально, поскольку у меня нет стартовой страницы.
Написал консольное приложение для тестирования:
private static async void PostToStudentService()
{
using (var client = new HttpClient())
{
var studentToPost = new InComingStudent() { StudentID = "847", Batch="56"};
client.BaseAddress = new Uri("http://localhost:53247/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
HttpResponseMessage response = await client.PostAsXmlAsync("api/Students/StudentStatus", studentToPost);
if (response.IsSuccessStatusCode)
{
// Print the response
}
}
}
MediaTypeWithQualityHeaderValue установлен в application/xml. Все идет нормально. Когда служба запущена, и я запускаю консольное приложение, ответ будет равен 404 "Not Found".
Что мне не хватает?
Любая помощь приветствуется.
С уважением.
Вы пробовали [FromBody]
?
public class StudentsController : ApiController
{
[HttpPost]
public StudentResult StudentStatus([FromBody]InComingStudent inComingStudent)
{
ProcessStudent po = new ProcessStudent();
StudentResult studentResult = po.ProcessStudent();
return StudentResult;
}
}
И в качестве предложения я бы использовал атрибут-маршрутизацию.
public class StudentsController : ApiController
{
[HttpPost, Route("api/stutents/studentsstatus")]
public StudentResult StudentStatus([FromBody]InComingStudent inComingStudent)
{
// ...
}
}