Skip to content

Commit b8ac189

Browse files
committed
Nullables and OAuth
1 parent e6b4d20 commit b8ac189

File tree

20 files changed

+411
-248
lines changed

20 files changed

+411
-248
lines changed

.github/workflows/build-dev.yml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ on:
66
- 'docs/**'
77
- 'yarn.lock'
88
- 'package.json'
9-
- '.github/workflows/publish-docs.yml'
109
branches:
1110
- master
1211
tags:
@@ -44,6 +43,4 @@ jobs:
4443
- name: Create and push NuGet package
4544
run: |
4645
dotnet pack -c Release -o nuget -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg
47-
dotnet nuget push **/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
48-
49-
46+
dotnet nuget push **/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate

RestSharp.sln

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Perf", "Perf", "{1C42C435-8
2727
EndProject
2828
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestSharp.Benchmarks", "benchmarks\RestSharp.Benchmarks\RestSharp.Benchmarks.csproj", "{997AEFE5-D7D4-4033-A31A-07F476D6FE5D}"
2929
EndProject
30+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RestSharp.InteractiveTests", "test\RestSharp.InteractiveTests\RestSharp.InteractiveTests.csproj", "{6D7D1D60-4473-4C52-800C-9B892C6640A5}"
31+
EndProject
3032
Global
3133
GlobalSection(SolutionConfigurationPlatforms) = preSolution
3234
Debug.Appveyor|Any CPU = Debug.Appveyor|Any CPU
@@ -316,6 +318,36 @@ Global
316318
{997AEFE5-D7D4-4033-A31A-07F476D6FE5D}.Release|x64.Build.0 = Release|Any CPU
317319
{997AEFE5-D7D4-4033-A31A-07F476D6FE5D}.Release|x86.ActiveCfg = Release|Any CPU
318320
{997AEFE5-D7D4-4033-A31A-07F476D6FE5D}.Release|x86.Build.0 = Release|Any CPU
321+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|Any CPU.ActiveCfg = Debug|Any CPU
322+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|Any CPU.Build.0 = Debug|Any CPU
323+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|ARM.ActiveCfg = Debug|Any CPU
324+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|ARM.Build.0 = Debug|Any CPU
325+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|Mixed Platforms.ActiveCfg = Debug|Any CPU
326+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|Mixed Platforms.Build.0 = Debug|Any CPU
327+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|x64.ActiveCfg = Debug|Any CPU
328+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|x64.Build.0 = Debug|Any CPU
329+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|x86.ActiveCfg = Debug|Any CPU
330+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug.Appveyor|x86.Build.0 = Debug|Any CPU
331+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
332+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
333+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|ARM.ActiveCfg = Debug|Any CPU
334+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|ARM.Build.0 = Debug|Any CPU
335+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
336+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
337+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|x64.ActiveCfg = Debug|Any CPU
338+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|x64.Build.0 = Debug|Any CPU
339+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|x86.ActiveCfg = Debug|Any CPU
340+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Debug|x86.Build.0 = Debug|Any CPU
341+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
342+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|Any CPU.Build.0 = Release|Any CPU
343+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|ARM.ActiveCfg = Release|Any CPU
344+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|ARM.Build.0 = Release|Any CPU
345+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
346+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|Mixed Platforms.Build.0 = Release|Any CPU
347+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|x64.ActiveCfg = Release|Any CPU
348+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|x64.Build.0 = Release|Any CPU
349+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|x86.ActiveCfg = Release|Any CPU
350+
{6D7D1D60-4473-4C52-800C-9B892C6640A5}.Release|x86.Build.0 = Release|Any CPU
319351
EndGlobalSection
320352
GlobalSection(SolutionProperties) = preSolution
321353
HideSolutionNode = FALSE
@@ -332,5 +364,6 @@ Global
332364
{D5DCF088-1126-4E6A-A175-CF8B6D5089A3} = {8C7B43EB-2F93-483C-B433-E28F9386AD67}
333365
{6914F0EF-F6D2-4BE6-8477-553EBBFF3BEE} = {8C7B43EB-2F93-483C-B433-E28F9386AD67}
334366
{997AEFE5-D7D4-4033-A31A-07F476D6FE5D} = {1C42C435-8826-4044-8775-A1DA40EF4866}
367+
{6D7D1D60-4473-4C52-800C-9B892C6640A5} = {9051DDA0-E563-45D5-9504-085EBAACF469}
335368
EndGlobalSection
336369
EndGlobal

src/RestSharp/Authenticators/OAuth/OAuthTools.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,15 +246,15 @@ public static string GetSignature(
246246
OAuthSignatureTreatment signatureTreatment,
247247
string signatureBase,
248248
string consumerSecret,
249-
string tokenSecret
249+
string? tokenSecret
250250
)
251251
{
252252
if (tokenSecret.IsEmpty())
253253
tokenSecret = string.Empty;
254254

255255
var unencodedConsumerSecret = consumerSecret;
256256
consumerSecret = Uri.EscapeDataString(consumerSecret);
257-
tokenSecret = Uri.EscapeDataString(tokenSecret);
257+
tokenSecret = Uri.EscapeDataString(tokenSecret!);
258258

259259
var signature = signatureMethod switch
260260
{

src/RestSharp/Authenticators/OAuth/WebPair.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
namespace RestSharp.Authenticators.OAuth
1818
{
19-
internal class WebPair
19+
class WebPair
2020
{
2121
public WebPair(string name, string value)
2222
{
@@ -34,9 +34,9 @@ internal class WebPairComparer : IComparer<WebPair>
3434
{
3535
public int Compare(WebPair x, WebPair y)
3636
{
37-
var compareName = string.CompareOrdinal(x?.Name, y?.Name);
37+
var compareName = string.CompareOrdinal(x.Name, y.Name);
3838

39-
return compareName != 0 ? compareName : string.CompareOrdinal(x?.Value, y?.Value);
39+
return compareName != 0 ? compareName : string.CompareOrdinal(x.Value, y.Value);
4040
}
4141
}
4242
}

src/RestSharp/Http.Async.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,16 @@ public partial class Http
2828
TimeOutState _timeoutState;
2929

3030
/// <inheritdoc />
31-
public HttpWebRequest AsPostAsync(Action<HttpResponse> action, string httpMethod)
31+
public HttpWebRequest? AsPostAsync(Action<HttpResponse> action, string httpMethod)
3232
=> PutPostInternalAsync(httpMethod.ToUpperInvariant(), action);
3333

3434
/// <inheritdoc />
35-
public HttpWebRequest AsGetAsync(Action<HttpResponse> action, string httpMethod)
35+
public HttpWebRequest? AsGetAsync(Action<HttpResponse> action, string httpMethod)
3636
=> GetStyleMethodInternalAsync(httpMethod.ToUpperInvariant(), action);
3737

38-
HttpWebRequest GetStyleMethodInternalAsync(string method, Action<HttpResponse> callback)
38+
HttpWebRequest? GetStyleMethodInternalAsync(string method, Action<HttpResponse> callback)
3939
{
40-
HttpWebRequest webRequest = null;
40+
HttpWebRequest? webRequest = null;
4141

4242
try
4343
{
@@ -69,9 +69,9 @@ HttpWebRequest GetStyleMethodInternalAsync(string method, Action<HttpResponse> c
6969
return webRequest;
7070
}
7171

72-
HttpWebRequest PutPostInternalAsync(string method, Action<HttpResponse> callback)
72+
HttpWebRequest? PutPostInternalAsync(string method, Action<HttpResponse> callback)
7373
{
74-
HttpWebRequest webRequest = null;
74+
HttpWebRequest? webRequest = null;
7575

7676
try
7777
{
@@ -192,9 +192,9 @@ static void TimeoutCallback(object state, bool timedOut)
192192
}
193193
}
194194

195-
static void GetRawResponseAsync(IAsyncResult result, Action<HttpWebResponse> callback)
195+
static void GetRawResponseAsync(IAsyncResult result, Action<HttpWebResponse?> callback)
196196
{
197-
HttpWebResponse raw;
197+
HttpWebResponse? raw;
198198

199199
try
200200
{
@@ -240,7 +240,7 @@ void ResponseCallback(IAsyncResult result, Action<HttpResponse> callback)
240240
result, webResponse =>
241241
{
242242
var response = ExtractResponseData(webResponse);
243-
webResponse.Dispose();
243+
webResponse?.Dispose();
244244
ExecuteCallback(response, callback);
245245
}
246246
);
@@ -285,7 +285,7 @@ class TimeOutState
285285
{
286286
public bool TimedOut { get; set; }
287287

288-
public HttpWebRequest Request { get; set; }
288+
public HttpWebRequest? Request { get; set; }
289289
}
290290
}
291291
}

src/RestSharp/Http.cs

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
using System.Text.RegularExpressions;
2626
using RestSharp.Extensions;
2727

28+
#pragma warning disable 618
29+
2830
namespace RestSharp
2931
{
3032
/// <summary>
@@ -36,6 +38,7 @@ public partial class Http : IHttp
3638

3739
public string FormBoundary { get; } = "---------" + Guid.NewGuid().ToString().ToUpper();
3840

41+
// ReSharper disable once PrivateFieldCanBeConvertedToLocalVariable
3942
static readonly Regex AddRangeRegex = new Regex("(\\w+)=(\\d+)-(\\d+)$");
4043

4144
readonly IDictionary<string, Action<HttpWebRequest, string>> _restrictedHeaderActions;
@@ -143,10 +146,10 @@ static void AddRange(HttpWebRequest r, string range)
143146
public int ReadWriteTimeout { get; set; }
144147

145148
/// <inheritdoc />
146-
public ICredentials Credentials { get; set; }
149+
public ICredentials? Credentials { get; set; }
147150

148151
/// <inheritdoc />
149-
public CookieContainer CookieContainer { get; set; }
152+
public CookieContainer? CookieContainer { get; set; }
150153

151154
/// <inheritdoc />
152155
public Action<Stream, IHttpResponse> AdvancedResponseWriter { get; set; }
@@ -164,7 +167,7 @@ static void AddRange(HttpWebRequest r, string range)
164167
public bool Pipelined { get; set; }
165168

166169
/// <inheritdoc />
167-
public X509CertificateCollection ClientCertificates { get; set; }
170+
public X509CertificateCollection? ClientCertificates { get; set; }
168171

169172
/// <inheritdoc />
170173
public int? MaxRedirects { get; set; }
@@ -200,7 +203,7 @@ static void AddRange(HttpWebRequest r, string range)
200203
public Uri Url { get; set; }
201204

202205
/// <inheritdoc />
203-
public string Host { get; set; }
206+
public string? Host { get; set; }
204207

205208
/// <inheritdoc />
206209
public IList<DecompressionMethods> AllowedDecompressionMethods { get; set; }
@@ -212,25 +215,25 @@ static void AddRange(HttpWebRequest r, string range)
212215
public bool UnsafeAuthenticatedConnectionSharing { get; set; }
213216

214217
/// <inheritdoc />
215-
public IWebProxy Proxy { get; set; }
218+
public IWebProxy? Proxy { get; set; }
216219

217220
/// <inheritdoc />
218-
public RequestCachePolicy CachePolicy { get; set; }
221+
public RequestCachePolicy? CachePolicy { get; set; }
219222

220223
/// <inheritdoc />
221224
/// <summary>
222225
/// Callback function for handling the validation of remote certificates.
223226
/// </summary>
224-
public RemoteCertificateValidationCallback RemoteCertificateValidationCallback { get; set; }
227+
public RemoteCertificateValidationCallback? RemoteCertificateValidationCallback { get; set; }
225228

226229
/// <inheritdoc />
227-
public Action<HttpWebRequest> WebRequestConfigurator { get; set; }
230+
public Action<HttpWebRequest>? WebRequestConfigurator { get; set; }
228231

229232
[Obsolete]
230233
public static IHttp Create() => new Http();
231234

232235
[Obsolete("Overriding this method won't be possible in future version")]
233-
protected virtual HttpWebRequest CreateWebRequest(Uri url) => null;
236+
protected virtual HttpWebRequest? CreateWebRequest(Uri url) => null;
234237

235238
static HttpWebRequest CreateRequest(Uri uri) => (HttpWebRequest) WebRequest.Create(uri);
236239

@@ -245,7 +248,7 @@ string GetMultipartFormData(HttpParameter param)
245248
? "--{0}{3}Content-Type: {4}{3}Content-Disposition: form-data; name=\"{1}\"{3}{3}{2}{3}"
246249
: "--{0}{3}Content-Disposition: form-data; name=\"{1}\"{3}{3}{2}{3}";
247250

248-
return string.Format(format, FormBoundary, param.Name, param.Value, LineBreak, param.ContentType);
251+
return string.Format(format, FormBoundary, param.Name, param.Value, LineBreak, param.ContentType!);
249252
}
250253

251254
string GetMultipartFooter() => $"--{FormBoundary}--{LineBreak}";
@@ -257,8 +260,13 @@ void PreparePostBody(WebRequest webRequest)
257260
if (HasFiles || AlwaysMultipartFormData)
258261
{
259262
if (needsContentType)
260-
webRequest.ContentType = GetMultipartFormContentType();
261-
else if (!webRequest.ContentType.Contains("boundary")) webRequest.ContentType = webRequest.ContentType + "; boundary=" + FormBoundary;
263+
{
264+
webRequest.ContentType = GetMultipartFormContentType();
265+
}
266+
else if (!webRequest.ContentType.Contains("boundary"))
267+
{
268+
webRequest.ContentType = webRequest.ContentType + "; boundary=" + FormBoundary;
269+
}
262270
}
263271
else if (HasBody)
264272
{
@@ -309,6 +317,7 @@ HttpResponse ExtractResponseData(HttpWebResponse webResponse)
309317

310318
if (webResponse.Cookies != null)
311319
foreach (Cookie cookie in webResponse.Cookies)
320+
{
312321
response.Cookies.Add(
313322
new HttpCookie
314323
{
@@ -328,12 +337,15 @@ HttpResponse ExtractResponseData(HttpWebResponse webResponse)
328337
Version = cookie.Version
329338
}
330339
);
340+
}
331341

332342
response.Headers = webResponse.Headers.AllKeys
333-
.Select(x => new HttpHeader(x, webResponse.Headers[x])).ToList();
343+
.Select(x => new HttpHeader(x, webResponse.Headers[x]))
344+
.ToList();
334345

335346
var webResponseStream = webResponse.GetResponseStream();
336-
ProcessResponseStream();
347+
if (webResponseStream != null)
348+
ProcessResponseStream();
337349

338350
webResponse.Close();
339351
return response;

src/RestSharp/HttpHeader.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class HttpHeader
2828
/// </summary>
2929
/// <param name="name">Header name</param>
3030
/// <param name="value">Header value</param>
31-
public HttpHeader(string name, string value)
31+
public HttpHeader(string name, string? value)
3232
{
3333
Name = name;
3434
Value = value ?? "";
@@ -39,7 +39,7 @@ public HttpHeader(string name, string value)
3939
/// </summary>
4040
/// <param name="name">Header name</param>
4141
/// <param name="value">Header value, which has to implement ToString() properly</param>
42-
public HttpHeader(string name, object value) : this(name, value?.ToString()) { }
42+
public HttpHeader(string name, object? value) : this(name, value?.ToString()) { }
4343

4444
/// <summary>
4545
/// Creates a new instance of HttpHeader. Remember to assign properties!

src/RestSharp/HttpParameter.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class HttpParameter
2929
/// <param name="name">Header name</param>
3030
/// <param name="value">Header value</param>
3131
/// <param name="contentType">Parameter content type</param>
32-
public HttpParameter(string name, string value, string contentType = null)
32+
public HttpParameter(string name, string? value, string? contentType = null)
3333
{
3434
Name = name;
3535
ContentType = contentType;
@@ -42,7 +42,7 @@ public HttpParameter(string name, string value, string contentType = null)
4242
/// <param name="name">Header name</param>
4343
/// <param name="value">Header value, which has to implement ToString() properly</param>
4444
/// <param name="contentType">Parameter content type</param>
45-
public HttpParameter(string name, object value, string contentType = null) : this(name, value?.ToString(), contentType) { }
45+
public HttpParameter(string name, object? value, string? contentType = null) : this(name, value?.ToString(), contentType) { }
4646

4747
[Obsolete("Use parameterized constructor")]
4848
public HttpParameter() { }
@@ -60,6 +60,6 @@ public HttpParameter() { }
6060
/// <summary>
6161
/// Content-Type of the parameter
6262
/// </summary>
63-
public string ContentType { get; set; }
63+
public string? ContentType { get; set; }
6464
}
6565
}

0 commit comments

Comments
 (0)