首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >400错误的请求c#

400错误的请求c#
EN

Stack Overflow用户
提问于 2020-07-30 23:57:19
回答 2查看 197关注 0票数 0

当我尝试调用Web服务(Navision)时,我遇到了一个小问题,它可以与Postman一起工作,但不能与他生成的代码一起工作。

我在Postman Core3.0中创建了一个项目控制台和参考RestSharp (在.Net的代码中使用)。当我运行程序时,我总是有一个

代码语言:javascript
复制
StatusCode: 400, ReasonPhrase: 'Bad Request', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Server: Microsoft-HTTPAPI/2.0
  Date: Thu, 30 Jul 2020 15:48:44 GMT
  Content-Length: 0
}

我尝试使用HttpClient,但我得到了相同的结果。

下面是我的代码:

代码语言:javascript
复制
var client = new RestClient("http://..../Codeunit/OrderIntegrationXML");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Accept-Encoding", "gzip,deflate");
request.AddHeader("Content-Type", "text/xml;charset=UTF-8");
request.AddHeader("SOAPAction", "urn:microsoft-dynamics-schemas/codeunit/OrderIntegrationXML:InsertOrderXMLWS");
request.AddHeader("Content-Length", "3445");
request.AddHeader("Host", "....");
request.AddHeader("Connection", "Keep-Alive");
request.AddHeader("Authorization", @"NTLM TlRMTVNTUAADAAAAGAAYAEAAAAD6APoAWAAAABgAGABSAQAACgAKAGoBAAAWABYAdAEAAAAAAACKAQAANQIIIDGc+rMQNjBw51iSNdthdYVdWjSNgaXiObFF1YN5hjakUOfgw7DmgQkBAQAAAAAAAPDxIMLFZdYBXVo0jYGl4jkAAAAAAgAYAEwARQBDAE8AUQBTAFAATwBSAFQASQBGAAEAEgBTAFIAVgBOAEEAVgBBAFMAMgAEACQAbABlAGMAbwBxAHMAcABvAHIAdABpAGYALgBsAG8AYwBhAGwAAwA4AFMAUgBWAE4AQQBWAEEAUwAyAC4AbABlAGMAbwBxAHMAcABvAHIAdABpAGYALgBsAG8AYwBhAGwABQAkAGwAZQBjAG8AcQBzAHAAbwByAHQAaQBmAC4AbABvAGMAYQBsAAcACAD13x3CxWXWAQAAAABMAEUAQwBPAFEAUwBQAE8AUgBUAEkARgBhAGQAbABsAGUAUwBPAEcARQBDAE8AUQBNADIAMAA0AA==");

request.AddParameter("text/xml;charset=UTF-8", "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ord=\"urn:microsoft-dynamics-schemas/codeunit/OrderIntegrationXML\" xmlns:x62=\"urn:microsoft-dynamics-nav/xmlports/x62000\">\r\n   <soapenv:Header/>\r\n   <soapenv:Body>\r\n      <ord:InsertOrderXMLWS>\r\n         <ord:p_OriginType>?</ord:p_OriginType>\r\n         <ord:p_OriginOrderNo>?</ord:p_OriginOrderNo>\r\n         <ord:p_MappingSalesOrderImport TransferDate=\"?\" OriginType=\"?\" QueueLabel=\"?\">\r\n            <!--1 or more repetitions:-->\r\n            <x62:SalesOrder>\r\n               e\r\n               <x62:OriginOrderNumber>?</x62:OriginOrderNumber>\r\n               gero\r\n               <x62:Company>?</x62:Company>\r\n               cum\r\n               <x62:SellToCustomer>?</x62:SellToCustomer>\r\n               sonoras\r\n               <x62:BillToCustomer>?</x62:BillToCustomer>\r\n               aeoliam\r\n               <x62:ShipToCode>?</x62:ShipToCode>\r\n               quae\r\n               <!--1 or more repetitions:-->\r\n               <x62:YourReference>?</x62:YourReference>\r\n               ventos\r\n               <x62:ShipmentMethodCode>?</x62:ShipmentMethodCode>\r\n               verrantque\r\n               <x62:LocationCode>?</x62:LocationCode>\r\n               temperat\r\n               <x62:CurrencyCode>?</x62:CurrencyCode>\r\n               per\r\n               <!--1 or more repetitions:-->\r\n               <x62:TransportMethod>?</x62:TransportMethod>\r\n               turbine\r\n               <x62:SaleOrderType>?</x62:SaleOrderType>\r\n               circum\r\n               <x62:PreparationType>?</x62:PreparationType>\r\n               regemque\r\n               <x62:SalesPersonCode>?</x62:SalesPersonCode>\r\n               nimborum\r\n               <!--1 or more repetitions:-->\r\n               <x62:Comment>?</x62:Comment>\r\n               fremunt\r\n               <x62:DotationContractCode>?</x62:DotationContractCode>\r\n               foedere\r\n               <!--1 or more repetitions:-->\r\n               <x62:Lines>\r\n                  ferant\r\n                  <!--1 or more repetitions:-->\r\n                  <x62:Line>\r\n                     <x62:OriginOrderNumber>?</x62:OriginOrderNumber>\r\n                     <x62:OriginOrderLineNumber>0</x62:OriginOrderLineNumber>\r\n                     <x62:ItemNumber>?</x62:ItemNumber>\r\n                     <x62:SeriesNumber>?</x62:SeriesNumber>\r\n                     <x62:VariantCode>?</x62:VariantCode>\r\n                     <x62:RequestedDeliveryDate>0001-01-01</x62:RequestedDeliveryDate>\r\n                     <x62:Quantity>0</x62:Quantity>\r\n                     <x62:CustomerRateGroup>?</x62:CustomerRateGroup>\r\n                     <x62:TradeTermTypeName>?</x62:TradeTermTypeName>\r\n                     <x62:LineDiscount1>0</x62:LineDiscount1>\r\n                     <x62:LineDiscount2>0</x62:LineDiscount2>\r\n                     <x62:LineDiscount3>0</x62:LineDiscount3>\r\n                     <x62:LineDiscount4>0</x62:LineDiscount4>\r\n                     <x62:LineDiscount5>0</x62:LineDiscount5>\r\n                     <x62:OriginUnitPrice>0</x62:OriginUnitPrice>\r\n                     <!--Optional:-->\r\n                     <x62:JerseyNumber>?</x62:JerseyNumber>\r\n                  </x62:Line>\r\n                  profundum\r\n               </x62:Lines>\r\n               sceptra\r\n            </x62:SalesOrder>\r\n         </ord:p_MappingSalesOrderImport>\r\n      </ord:InsertOrderXMLWS>\r\n   </soapenv:Body>\r\n</soapenv:Envelope>", ParameterType.RequestBody);
IRestResponse responseZ = client.Execute(request);
Console.WriteLine(responseZ.Content);

更新:请求(使用fiddler和一个轻量级xml捕获):

代码语言:javascript
复制
POST http://.../Codeunit/OrderIntegrationXML?wsdl HTTP/1.1
Accept-Encoding: gzip, deflate
SOAPAction: "urn:microsoft-dynamics-schemas/codeunit/OrderIntegrationXML:InsertOrderXMLWS"
Host: ...
Connection: Keep-Alive
Authorization: NTLM TlRMTVNTUAADAAAAGAAYAEAAAAD6APoAWAAAABgAGABSAQAACgAKAGoBAAAWABYAdAEAAAAAAACKAQAANQIIILBaGvPsioy+B4lYWuqIouke/Eu984yP0hKYh6dzm+imf4Y+Qy+QH8UBAQAAAAAAAKAjmmGaadYBHvxLvfOMj9IAAAAAAgAYAEwARQBDAE8AUQBTAFAATwBSAFQASQBGAAEAEgBTAFIAVgBOAEEAVgBBAFMAMgAEACQAbABlAGMAbwBxAHMAcABvAHIAdABpAGYALgBsAG8AYwBhAGwAAwA4AFMAUgBWAE4AQQBWAEEAUwAyAC4AbABlAGMAbwBxAHMAcABvAHIAdABpAGYALgBsAG8AYwBhAGwABQAkAGwAZQBjAG8AcQBzAHAAbwByAHQAaQBmAC4AbABvAGMAYQBsAAcACACo8pVhmmnWAQAAAABMAEUAQwBPAFEAUwBQAE8AUgBUAEkARgBhAGQAbABsAGUAUwBPAEcARQBDAE8AUQBNADIAMAA0AA==
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Content-Type: text/xml; charset=utf-8
Content-Length: 451

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ord="urn:microsoft-dynamics-schemas/codeunit/OrderIntegrationXML" xmlns:x62="urn:microsoft-dynamics-nav/xmlports/x62000">
   <soapenv:Header/>
   <soapenv:Body>
      <ord:InsertOrderXMLWS>
         <ord:p_OriginType>a</ord:p_OriginType>
         <ord:p_OriginOrderNo>z</ord:p_OriginOrderNo>
      </ord:InsertOrderXMLWS>
   </soapenv:Body>
 </soapenv:Envelope>

任何帮助都将不胜感激

EN

回答 2

Stack Overflow用户

发布于 2020-07-31 00:24:55

你有没有尝试过实现用户代理?在定义restclient之后添加以下代码。client.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36";

票数 1
EN

Stack Overflow用户

发布于 2020-08-04 23:58:56

好了,我发现问题了,NTLM身份验证不能硬编码。

因此,对于RestSharp:

代码语言:javascript
复制
var client = new RestClient(".../Codeunit/OrderIntegrationXML?wsdl");
client.Timeout = -1;
client.Authenticator = new NtlmAuthenticator();

var request = new RestRequest(Method.POST);

request.AddHeader("Host", "....");
request.AddHeader("Accept-Encoding", "gzip,deflate");
request.AddHeader("SOAPAction", @"""urn:microsoft-dynamics-schemas/codeunit/OrderIntegrationXML:InsertOrderXMLWS""");
request.AddHeader("Content-Type", "text/xml;charset=UTF-8");
request.AddHeader("Connection", "Keep-Alive");
request.AddHeader("User-Agent", "Apache-HttpClient/4.1.1");

request.AddParameter("text/xml;charset=UTF-8", "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ord=\"urn:microsoft-dynamics-schemas/codeunit/OrderIntegrationXML\" xmlns:x62=\"urn:microsoft-dynamics-nav/xmlports/x62000\">\r\n   <soapenv:Header/>\r\n   <soapenv:Body>\r\n      <ord:InsertOrderXMLWS>\r\n         <ord:p_OriginType>?</ord:p_OriginType>\r\n         <ord:p_OriginOrderNo>?</ord:p_OriginOrderNo>\r\n         <ord:p_MappingSalesOrderImport TransferDate=\"2001-01-01\" OriginType=\"?\" QueueLabel=\"?\">\r\n            <!--1 or more repetitions:-->\r\n            <x62:SalesOrder>\r\n               e\r\n               <x62:OriginOrderNumber>?</x62:OriginOrderNumber>\r\n               gero\r\n               <x62:Company>JOOR</x62:Company>\r\n               cum\r\n               <x62:SellToCustomer>?</x62:SellToCustomer>\r\n               sonoras\r\n               <x62:BillToCustomer>?</x62:BillToCustomer>\r\n               aeoliam\r\n               <x62:ShipToCode>?</x62:ShipToCode>\r\n               quae\r\n               <!--1 or more repetitions:-->\r\n               <x62:YourReference>?</x62:YourReference>\r\n               ventos\r\n               <x62:ShipmentMethodCode>?</x62:ShipmentMethodCode>\r\n               verrantque\r\n               <x62:LocationCode>?</x62:LocationCode>\r\n               temperat\r\n               <x62:CurrencyCode>?</x62:CurrencyCode>\r\n               per\r\n               <!--1 or more repetitions:-->\r\n               <x62:TransportMethod>?</x62:TransportMethod>\r\n               turbine\r\n               <x62:SaleOrderType>?</x62:SaleOrderType>\r\n               circum\r\n               <x62:PreparationType>?</x62:PreparationType>\r\n               regemque\r\n               <x62:SalesPersonCode>?</x62:SalesPersonCode>\r\n               nimborum\r\n               <!--1 or more repetitions:-->\r\n               <x62:Comment>?</x62:Comment>\r\n               fremunt\r\n               <x62:DotationContractCode>?</x62:DotationContractCode>\r\n               foedere\r\n               <!--1 or more repetitions:-->\r\n               <x62:Lines>\r\n                  ferant\r\n                  <!--1 or more repetitions:-->\r\n                  <x62:Line>\r\n                     <x62:OriginOrderNumber>?</x62:OriginOrderNumber>\r\n                     <x62:OriginOrderLineNumber>0</x62:OriginOrderLineNumber>\r\n                     <x62:ItemNumber>?</x62:ItemNumber>\r\n                     <x62:SeriesNumber>?</x62:SeriesNumber>\r\n                     <x62:VariantCode>?</x62:VariantCode>\r\n                     <x62:RequestedDeliveryDate>0001-01-01</x62:RequestedDeliveryDate>\r\n                     <x62:Quantity>0</x62:Quantity>\r\n                     <x62:CustomerRateGroup>?</x62:CustomerRateGroup>\r\n                     <x62:TradeTermTypeName>?</x62:TradeTermTypeName>\r\n                     <x62:LineDiscount1>0</x62:LineDiscount1>\r\n                     <x62:LineDiscount2>0</x62:LineDiscount2>\r\n                     <x62:LineDiscount3>0</x62:LineDiscount3>\r\n                     <x62:LineDiscount4>0</x62:LineDiscount4>\r\n                     <x62:LineDiscount5>0</x62:LineDiscount5>\r\n                     <x62:OriginUnitPrice>0</x62:OriginUnitPrice>\r\n                     <!--Optional:-->\r\n                     <x62:JerseyNumber>?</x62:JerseyNumber>\r\n                  </x62:Line>\r\n                  profundum\r\n               </x62:Lines>\r\n               sceptra\r\n            </x62:SalesOrder>\r\n         </ord:p_MappingSalesOrderImport>\r\n      </ord:InsertOrderXMLWS>\r\n   </soapenv:Body>\r\n</soapenv:Envelope>", ParameterType.RequestBody);
IRestResponse responseZ = client.Execute(request);
Console.WriteLine(responseZ.Content);

对于httpClient

代码语言:javascript
复制
 static readonly CredentialCache credentialsCache = new CredentialCache { { new Uri("http:.../Codeunit/OrderIntegrationXML"), "NTLM", CredentialCache.DefaultNetworkCredentials } };
 static readonly HttpClient client = new HttpClient(new LoggingHandler(new HttpClientHandler() {UseDefaultCredentials = false , Credentials = credentialsCache, AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }));

感谢社区

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63176928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档