Skip to content
This repository was archived by the owner on Apr 10, 2018. It is now read-only.
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit f178a88

Browse files
committedJul 16, 2015
- Add "Content-*" parameters to the HttpContent instead of the request.
- Added unit tests
1 parent 3cced2c commit f178a88

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed
 

‎RestSharp.Portable.Test/IssueTests.cs

+32
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,38 @@ public void TestIssue25()
135135
}
136136
}
137137

138+
[Fact(DisplayName = "Issue 29 ContentCollectionMode = MultiPart")]
139+
public async Task TestIssue29_CollectionModeMultiPart()
140+
{
141+
using (var client = new RestClient("http://httpbin.org/"))
142+
{
143+
var req = new RestRequest("post", HttpMethod.Post);
144+
req.AddParameter("a", "value-of-a");
145+
req.ContentCollectionMode = ContentCollectionMode.MultiPart;
146+
var resp = await client.Execute<RequestResponse>(req);
147+
Assert.NotNull(resp.Data);
148+
Assert.NotNull(resp.Data.Form);
149+
Assert.True(resp.Data.Form.ContainsKey("a"));
150+
Assert.Equal("value-of-a", resp.Data.Form["a"]);
151+
}
152+
}
153+
154+
[Fact(DisplayName = "Issue 29 ContentType as Parameter")]
155+
public async Task TestIssue29_ContentTypeParameter()
156+
{
157+
using (var client = new RestClient("http://httpbin.org/"))
158+
{
159+
var req = new RestRequest("post", HttpMethod.Post);
160+
req.AddParameter("a", "value-of-a");
161+
req.AddHeader("content-type", "application/x-www-form-urlencoded;charset=utf-8");
162+
var resp = await client.Execute<RequestResponse>(req);
163+
Assert.NotNull(resp.Data);
164+
Assert.NotNull(resp.Data.Form);
165+
Assert.True(resp.Data.Form.ContainsKey("a"));
166+
Assert.Equal("value-of-a", resp.Data.Form["a"]);
167+
}
168+
}
169+
138170
[Fact(DisplayName = "Issue 32")]
139171
public async Task TestIssue32()
140172
{

‎RestSharp.Portable/HttpClientImpl/DefaultHttpClientFactory.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ protected virtual HttpMethod GetHttpMethod(IRestClient client, IRestRequest requ
163163
/// <returns>The modified HTTP request message</returns>
164164
protected virtual HttpRequestMessage AddHttpHeaderParameters(HttpRequestMessage message, IRestRequest request)
165165
{
166-
foreach (var param in request.Parameters.Where(x => x.Type == ParameterType.HttpHeader))
166+
foreach (var param in request.Parameters.Where(x => x.Type == ParameterType.HttpHeader && !x.IsContentParameter()))
167167
{
168168
if (message.Headers.Contains(param.Name))
169169
message.Headers.Remove(param.Name);

‎RestSharp.Portable/ParameterExtensions.cs

+10
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,16 @@ public static IEnumerable<FileParameter> GetFileParameters(this IEnumerable<Para
5757
return parameters.OfType<FileParameter>();
5858
}
5959

60+
/// <summary>
61+
/// Is the given parameter a content parameter?
62+
/// </summary>
63+
/// <param name="parameter">the parameter to test</param>
64+
/// <returns>true when the parameter is a content parameter</returns>
65+
public static bool IsContentParameter(this Parameter parameter)
66+
{
67+
return !string.IsNullOrEmpty(parameter.Name) && parameter.Name.StartsWith("Content-", StringComparison.OrdinalIgnoreCase);
68+
}
69+
6070
internal static string ToEncodedString(this Parameter parameter, bool spaceAsPlus = false)
6171
{
6272
switch (parameter.Type)

‎RestSharp.Portable/RestClient.cs

+18
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,24 @@ private async Task<HttpResponseMessage> ExecuteRequest(IRestRequest request, Can
479479
if (bodyData != null)
480480
message.Content = bodyData;
481481

482+
if (message.Content != null)
483+
{
484+
var content = message.Content;
485+
foreach (var param in request.Parameters.Where(x => x.Type == ParameterType.HttpHeader && x.IsContentParameter()))
486+
{
487+
if (content.Headers.Contains(param.Name))
488+
content.Headers.Remove(param.Name);
489+
if (param.ValidateOnAdd)
490+
{
491+
content.Headers.Add(param.Name, param.AsString());
492+
}
493+
else
494+
{
495+
content.Headers.TryAddWithoutValidation(param.Name, param.AsString());
496+
}
497+
}
498+
}
499+
482500
if (EnvironmentUtilities.IsSilverlight && message.Method == HttpMethod.Get)
483501
_httpClient.DefaultRequestHeaders.Accept.Clear();
484502

0 commit comments

Comments
 (0)
This repository has been archived.