Служба прослушивания для soap запроса в веб-интерфейсе - PullRequest
0 голосов
/ 04 марта 2020

Я хочу создать веб-API для получения запроса от внешней службы SOAP.

Работа службы SOAP: Когда я отправляю запрос внешней службе, я также предоставить URL обратного вызова, на который служба отправит мне ответ.

Я хочу сделать это в Asp. net Core WebAPI. Это то, что я сделал.

Я создал контроллер WebAPI для получения ответа.

[Route("[controller]")]
[ApiController]
[Authorize]
public class RewardsController : ControllerBase
{
    [HttpGet]
    [Route("/api/B2CListener")]
    public ActionResult GetData(string document)
    {
        return Ok();
    }
}

Когда эта внешняя служба отправила мне ответ, я получил ошибку (извлечено из журнала) этот метод 405 не допускается. Мое приложение может получить ответ от внешней службы, но не может получить его в моем сервисе из-за недопустимого метода. Я пытался HttpPost, HttpGet, HttpPut, но ничего не работает. Любая помощь может быть оценена.

Ведение журнала: Это то, что регистрируется в журнале.

Запрос

http 10.117.8.132:801/api/B2CListener/  <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><res:ResultMsg xmlns:res="http://cps.huawei.com/cpsinterface/result"><![CDATA[<?xml version="1.0" encoding="UTF-8"?><Result><ResultParameters><ResultParameter><Key>FailedReason</Key><Value>Failed to match a reason type because the Identity Subtype factor of the credit party does not match.</Value></ResultParameter></ResultParameters><ResultCode>2005</ResultCode><ResultType>0</ResultType><OriginatorConversationID>SX20130129210023</OriginatorConversationID><ResultDesc>Can not match reason type.</ResultDesc><TransactionID>000000000000</TransactionID><ConversationID>AG_20130AAS2</ConversationID></Result>]]></res:ResultMsg></soapenv:Body></soapenv:Envelope>

Response

405: 

Я использовал ведение журнала RequestResponse, используя middleware

1 Ответ

0 голосов
/ 05 марта 2020

Причина ошибки 405 связана с тем, что запрос SOAP всегда является HttpPost, и я по ошибке добавил тег [Authorize] на контроллере, из-за которого запрос не был выполнен.

Обновлен код

[Route("[controller]")]
[ApiController]
public class RewardsController : ControllerBase
{
    [HttpGet]
    [Route("/api/B2CListener")]
    public void GetData()
        {
            using (var reader = new StreamReader(Request.Body))
            {
                var body = reader.ReadToEnd();
                // Do something
            }
        }
}
...