簡體   English   中英

400 錯誤請求 c#

[英]400 bad request c#

當我嘗試調用 Web 服務(Navision)時,我遇到了一個小問題,它適用於 Postman 但不適用於他生成的代碼。

我在 .Net Core 3.0 中創建了一個項目控制台和參考 RestSharp(在 Postman 的代碼中使用)。 當我運行程序時,我總是

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,但結果相同。

有我的代碼:

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);

更新:請求(用提琴手和燈 xml 捕捉):

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>

任何幫助將不勝感激

您是否嘗試過實現用戶代理? 在定義 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";

好的,我發現了問題,不能對 NTLM 身份驗證進行硬編碼。

所以對於 RestSharp:

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

 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 }));

感謝社區

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM