簡體   English   中英

如何為RestRequest設置Content-Type標頭?

[英]How to set the Content-Type header for a RestRequest?

我在RESTful Web服務器(java)中有一個Web服務,該服務器使用MULTIPART_FORM_DATA類型的媒體並產生APPLICATION_JSON 我正在使用REST客戶端(C#),並使用此Web服務。 我正在使用RestSharp作為REST客戶端。 我的代碼如下:

RestRequest request = new RestRequest("addDelivery", Method.POST);

request.AddParameter("sessionId", this.sessionId);
request.AddParameter("deliveryTo", DeliveryTo);
request.AddParameter("deliveryName", DeliveryName);

if (fileList.Count() > 0) // If fileList is not empty
{
    // Adds all the files to request
    foreach (MyFile myFile in fileList)
    {
        request.AddFile(myFile.fileName, myFile.filePath);
    }
}

只要我提供文件,它就可以正常工作。 如果未提供文件( fileList為空),我將獲得HTTP狀態415-不支持的媒體類型 我認為由於我不提供任何文件,因此Content-Type會自動更改為multipart/form-data以外的其他類型。 但是Web服務消耗了MULTIPART_FORM_DATA ,也許這就是為什么出現此錯誤的原因。 我嘗試添加以下代碼段,但得到相同的錯誤:

request.AddHeader("Content-Type", "multipart/form-data");

請注意,此操作(不帶文件的發送請求)可以從其他客戶端(java,ios)成功執行

我想你想要這個

request.AlwaysMultipartFormData = true

由於RestSharp在您不添加任何文件時都假定使用Content-Type application / x-www.form-urlencode,因此您需要自己應用該文件。 這應該可以解決您的問題。

RestRequest request = new RestRequest("addDelivery", Method.POST);

request.AddParameter("sessionId", this.sessionId);
request.AddParameter("deliveryTo", DeliveryTo);
request.AddParameter("deliveryName", DeliveryName);

if (fileList.Count() > 0) // If fileList is not empty
{
    // Adds all the files to request
    foreach (MyFile myFile in fileList)
    {
        request.AddFile(myFile.fileName, myFile.filePath);
    }
}
else // fileList.Count() is 0 or fileList is null
{
    request.AddHeader("Content-Type", "multipart/form-data");
}

暫無
暫無

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

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