У меня есть контроллер и метод веб-API .NET Core 2.1, который должен принимать запросы POST XML от внешней службы через HTTP. Ниже приведен заголовок метода действия контроллера.
[HttpPost]
[Produces("application/xml")]
public async Task<IActionResult> PostReceivedMessage([FromBody] ReceivedMessage receivedMessage)
Я написал специальный форматировщик входных данных XML для обработки XML-запроса, который прекрасно работает, когда я отправляю пример XML-запроса от Postman в действие контроллера приложения. ,Но когда служба отправляет подобный запрос, ответ от приложения имеет статус 400, Bad Request.
После некоторой отладки я обнаружил, что запросы поступают с
содержимым-Тип: application / x-www-form-urlencoded
вместо application / xml или text / xml, как и следовало ожидать. То же поведение проявляется приложением, если я изменяю заголовок в соответствии с типом содержимого в запросе, отправляемом внешней службой.
Я предполагаю, что x-www-form-urlencoded предназначен для данных формы, посколькуПривязка модели не работает, когда я изменяю заголовок действия на:
public async Task<IActionResult> PostReceivedMessage([FromForm] ReceivedMessage receivedMessage)
Поскольку у меня нет контроля над внешней службой, как я должен сделать действие контроллера способным обрабатывать запросы XML с помощью x-www-form-urlencoded как тип содержимого?
ОБНОВЛЕНИЕ: Ниже приведен пример запроса:
POST /check/api/receivedmessages HTTP/1.1
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.7.0_45
Host: xxx.xxx.xxx.xxx
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 270
<Request><requestId>95715274355861000</requestId><msisdn>345678955041</msisdn><timeStamp>2019/10/20 02:23:55</timeStamp><keyword>MO</keyword><dataSet><param><id>UserData</id><value>VHVqrA==</value></param><param><id>DA</id><value>555</value></param></dataSet></Request>