Web services 在Asp.net内核中使用Httpclient发送SOAP请求
我使用Asp.net Core,为了调用一个Web services 在Asp.net内核中使用Httpclient发送SOAP请求,web-services,soap,asp.net-core,asmx,Web Services,Soap,Asp.net Core,Asmx,我使用Asp.net Core,为了调用一个asmx服务,该服务有4个方法,我想通过名称调用其中一个:Verify方法,我执行以下步骤: 1-创建realtedSOAP: private XmlDocument CreateSoapEnvelope(PayVM payModel) { XmlDocument soapEnvelop = new XmlDocument(); string requiredXML = string
asmx服务
,该服务有4个方法,我想通过名称调用其中一个:Verify
方法,我执行以下步骤:
1-创建realtedSOAP
:
private XmlDocument CreateSoapEnvelope(PayVM payModel)
{
XmlDocument soapEnvelop = new XmlDocument();
string requiredXML = string.Format(@"<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:xsi=""http://www.w3.org/1999/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/1999/XMLSchema""><SOAP-ENV:Body><verifyTransaction xmlns=""http://tempuri.org/""> <String_1 xsi:type=""xsd:string"">{0}</String_1><String_2 xsi:type=""xsd:string"">{1}</String_2></verifyTransaction></SOAP-ENV:Body></SOAP-ENV:Envelope>", payModel.ReNO, payModel.MID);
soapEnvelop.LoadXml(requiredXML);
return soapEnvelop;
}
但是我没有得到结果,我尝试使用与soapui
相同的参数来使用服务,服务工作正常,但以我的方式得到了StatusCode:400
问题出在哪里
XmlDocument soapRequest = CreateSoapEnvelope(iPGVerifyResultModel);
using (var client = new HttpClient())
{
var request = new HttpRequestMessage()
{
RequestUri = new Uri("relatedUri/ServiceName.asmx"),
Method = HttpMethod.Post
};
request.Content = new StringContent(soapRequest.ToString(), Encoding.UTF8, "text/xml");
request.Headers.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));
request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
request.Headers.Add("SOAPAction", "Verify"); //I want to call this method
HttpResponseMessage response = client.SendAsync(request).Result;
if (!response.IsSuccessStatusCode)
{
throw new Exception();
}
Task<Stream> streamTask = response.Content.ReadAsStreamAsync();
Stream stream = streamTask.Result;
var sr = new StreamReader(stream);
var soapResponse = XDocument.Load(sr);
//do some other stuff...
}