簡體   English   中英

設置 RestSharp Content-Type application/atom+xml;type=entry

[英]Set RestSharp Content-Type application/atom+xml;type=entry

我正在使用 RestSharp 107.1.3,我正在努力正確設置請求標頭。 它在 RestSharp 106.6.9 中工作,但自升級以來,請求失敗並顯示以下消息:

StatusCode: NotAcceptable, Content-Type: text/html, Content-Length: 1346)

並且內容類型始終是“text/html”,這是錯誤的。

在此處輸入圖像描述

返回的 HTML 顯示406 - Client browser does not accept the MIME type of the requested page

這是適用於舊版本 RestSharp 但它不適用於新版本的代碼:

RestClient client = new RestClient( appSettings.BaseURL )
{
    Authenticator = new HttpBasicAuthenticator( appSettings.User, appSettings.Password )
};

RestRequest request = new RestRequest( "GL_GeneralJournalHeaderSPECIAL", Method.POST );
request.AddHeader( "Accept", "application/atom+xml;type=feed" );
request.Parameters.Clear();
request.AddParameter( "application/atom+xml;type=entry", sdata, ParameterType.RequestBody );
request.AddXmlBody( sdata );
request.RequestFormat = DataFormat.Xml;

IRestResponse response = await client.ExecuteTaskAsync( request );

這就是我試圖與新版本的 RestSharp 一起使用的內容。 注釋行,在每一種可能的組合中,都是我試圖讓它發揮作用的嘗試。

var options = new RestClientOptions()
{
    BaseUrl = new Uri( appSettings.SaBaseUrl ),
    RemoteCertificateValidationCallback = ( sender, certificate, chain, sslPolicyErrors ) => true

};
var client = new RestClient( options )
{
    Authenticator = new HttpBasicAuthenticator( appSettings.UserName, appSettings.Password ),
};
//client.AddDefaultHeader( KnownHeaders.Accept, "application/atom+xml;type=entry" );

var request = new RestRequest( "GL_GeneralJournalHeaderSPECIAL", Method.Post )
{
    RequestFormat = DataFormat.Xml
};
// request.AddHeader( "Accept", "application/atom+xml;type=entry" );
//request.AddHeader( "Content-Type", "application/atom+xml;type=entry" );
// request.AddBody( transaction.SData );
//request.AddXmlBody( transaction.SData );
request.AddParameter( "application/atom+xml;type=entry", transaction.SData, ParameterType.RequestBody );

var response = await client.ExecuteAsync( request );

我究竟做錯了什么? 我已經閱讀了好幾次文檔,但我一定還是遺漏了一些東西!

AddXmlBody方法添加了一個 object,RestSharp 會將其序列化為 XML 並發送序列化的正文。 它不應該與預序列化的有效負載一起使用。

如果要發送預序列化字符串,則需要使用AddStringBody(serializedString, contentType)

AddStringBody只是添加新BodyParameter實例的包裝器:

public static RestRequest AddStringBody(this RestRequest request, string body, string contentType)
    => request.AddParameter(new BodyParameter("", body, Ensure.NotEmpty(contentType, nameof(contentType))));

如果您需要 body 參數具有特定名稱,則可以使用request.AddParameter(new BodyParameter(...))

暫無
暫無

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

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