如何为RestRequest设置Content-Type标头?

时间:2014-08-12 07:36:32

标签: rest c#-4.0 restsharp

我在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以外的某种类型。但是,该网络服务会消耗 MULTIPART_FORM_DATA ,这可能是导致此错误的原因。我尝试添加以下代码段但得到相同的错误:

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

请注意,此操作(不带文件的发送请求)可以从其他客户端(java,ios)成功执行

2 个答案:

答案 0 :(得分:4)

我想你想要this

request.AlwaysMultipartFormData = true

答案 1 :(得分:0)

由于当您不添加任何文件时,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");
}
相关问题