Skip to content

Commit b6f0e30

Browse files
committed
added opportunity to set Headers for Patch Methods
1 parent 279cefe commit b6f0e30

File tree

4 files changed

+35
-25
lines changed

4 files changed

+35
-25
lines changed

src/CommonLibrariesForNET/IJsonHttpClient.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ public interface IJsonHttpClient : IDisposable
2222
Task<T> HttpBinaryDataPostAsync<T>(string urlSuffix, object inputObject, byte[] fileContents, string headerName, string fileName);
2323

2424
// PATCH
25-
Task<SuccessResponse> HttpPatchAsync(object inputObject, string urlSuffix);
26-
Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri);
27-
Task<SuccessResponse> HttpPatchAsync(object inputObject, string urlSuffix, bool ignoreNull);
28-
Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri, NullValueHandling nullValueHandling);
25+
Task<SuccessResponse> HttpPatchAsync(object inputObject, string urlSuffix, IDictionary<string, string> headers = default);
26+
Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri, IDictionary<string, string> headers = default);
27+
Task<SuccessResponse> HttpPatchAsync(object inputObject, string urlSuffix, bool ignoreNull, IDictionary<string, string> headers = default);
28+
Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri, NullValueHandling nullValueHandling, IDictionary<string, string> headers = default);
2929

3030
// DELETE
3131
Task<bool> HttpDeleteAsync(string urlSuffix);

src/CommonLibrariesForNET/Internals/BaseHttpClient.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Net;
34
using System.Net.Http;
45
using System.Net.Http.Headers;
@@ -82,7 +83,7 @@ protected async Task<string> HttpPostAsync(string payload, Uri uri)
8283
throw new BaseHttpClientException(response, responseMessage.StatusCode);
8384
}
8485

85-
protected async Task<string> HttpPatchAsync(string payload, Uri uri)
86+
protected async Task<string> HttpPatchAsync(string payload, Uri uri, IDictionary<string, string> headers)
8687
{
8788
var content = new StringContent(payload, Encoding.UTF8, _contentType);
8889

@@ -93,6 +94,11 @@ protected async Task<string> HttpPatchAsync(string payload, Uri uri)
9394
Content = content
9495
};
9596

97+
foreach (var keyValuePairHeader in headers ?? new Dictionary<string, string>())
98+
{
99+
request.Headers.TryAddWithoutValidation(keyValuePairHeader.Key, keyValuePairHeader.Value);
100+
}
101+
96102
var responseMessage = await HttpClient.SendAsync(request).ConfigureAwait(false);
97103
if (responseMessage.StatusCode == HttpStatusCode.NoContent)
98104
{

src/CommonLibrariesForNET/JsonHttpClient.cs

+18-19
Original file line numberDiff line numberDiff line change
@@ -198,28 +198,28 @@ public async Task<T> HttpBinaryDataPostAsync<T>(string urlSuffix, object inputOb
198198

199199
// PATCH
200200

201-
public async Task<SuccessResponse> HttpPatchAsync(object inputObject, string urlSuffix)
201+
public async Task<SuccessResponse> HttpPatchAsync(object inputObject, string urlSuffix, IDictionary<string, string> headers = default)
202202
{
203203
var url = Common.FormatUrl(urlSuffix, InstanceUrl, ApiVersion);
204-
return await HttpPatchAsync(inputObject, url);
204+
return await HttpPatchAsync(inputObject, url, headers);
205205
}
206206

207-
public async Task<SuccessResponse> HttpPatchAsync(object inputObject, string urlSuffix, bool ignoreNull)
207+
public async Task<SuccessResponse> HttpPatchAsync(object inputObject, string urlSuffix, bool ignoreNull, IDictionary<string, string> headers = default)
208208
{
209209
var url = Common.FormatUrl(urlSuffix, InstanceUrl, ApiVersion);
210210
if (ignoreNull == true)
211211
{
212-
return await HttpPatchAsync(inputObject, url);
212+
return await HttpPatchAsync(inputObject, url, headers);
213213
}
214214
else
215215
{
216-
return await HttpPatchAsync(inputObject, url, NullValueHandling.Include);
216+
return await HttpPatchAsync(inputObject, url, NullValueHandling.Include, headers);
217217
}
218-
// return await HttpPatchAsync(inputObject, url, ignoreNull);
218+
// return await HttpPatchAsync(inputObject, url, ignoreNull, headers);
219219
}
220220

221221

222-
public async Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri)
222+
public async Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri, IDictionary<string, string> headers = default)
223223
{
224224
var json = JsonConvert.SerializeObject(inputObject,
225225
Formatting.None,
@@ -231,7 +231,7 @@ public async Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri)
231231
});
232232
try
233233
{
234-
var response = await base.HttpPatchAsync(json, uri);
234+
var response = await base.HttpPatchAsync(json, uri, headers);
235235
return string.IsNullOrEmpty(response) ?
236236
new SuccessResponse{ Id = "", Errors = "", Success = true } :
237237
JsonConvert.DeserializeObject<SuccessResponse>(response);
@@ -242,22 +242,21 @@ public async Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri)
242242
}
243243
}
244244

245-
public async Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri, NullValueHandling nullValueHandling )
245+
public async Task<SuccessResponse> HttpPatchAsync(object inputObject, Uri uri, NullValueHandling nullValueHandling, IDictionary<string, string> headers = default)
246246
{
247-
248-
var json = JsonConvert.SerializeObject(inputObject,
249-
Formatting.None,
250-
new JsonSerializerSettings
251-
{
252-
NullValueHandling = nullValueHandling,
253-
ContractResolver = new UpdateableContractResolver(),
254-
DateFormatString = DateFormat
255-
});
247+
var json = JsonConvert.SerializeObject(inputObject,
248+
Formatting.None,
249+
new JsonSerializerSettings
250+
{
251+
NullValueHandling = nullValueHandling,
252+
ContractResolver = new UpdateableContractResolver(),
253+
DateFormatString = DateFormat
254+
});
256255

257256

258257
try
259258
{
260-
var response = await base.HttpPatchAsync(json, uri);
259+
var response = await base.HttpPatchAsync(json, uri, headers);
261260
return string.IsNullOrEmpty(response) ?
262261
new SuccessResponse { Id = "", Errors = "", Success = true } :
263262
JsonConvert.DeserializeObject<SuccessResponse>(response);

src/ForceToolkitForNET/ForceClient.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,17 @@ public async Task<SaveResponse> CreateAsync(string objectName, CreateRequest req
147147
}
148148

149149
public Task<SuccessResponse> UpdateAsync(string objectName, string recordId, object record)
150+
{
151+
return UpdateAsync(objectName, recordId, record, null);
152+
}
153+
154+
public Task<SuccessResponse> UpdateAsync(string objectName, string recordId, object record, IDictionary<string, string> headers)
150155
{
151156
if (string.IsNullOrEmpty(objectName)) throw new ArgumentNullException("objectName");
152157
if (string.IsNullOrEmpty(recordId)) throw new ArgumentNullException("recordId");
153158
if (record == null) throw new ArgumentNullException("record");
154159

155-
return _jsonHttpClient.HttpPatchAsync(record, string.Format("sobjects/{0}/{1}", objectName, recordId));
160+
return _jsonHttpClient.HttpPatchAsync(record, string.Format("sobjects/{0}/{1}", objectName, recordId), headers);
156161
}
157162

158163
public Task<SuccessResponse> UpsertExternalAsync(string objectName, string externalFieldName, string externalId, object record)

0 commit comments

Comments
 (0)