Skip to content

Commit e6d0ceb

Browse files
committed
Changed BaseAddress to string fro Uri.
1 parent 1844eef commit e6d0ceb

5 files changed

Lines changed: 57 additions & 9 deletions

File tree

Shuttle.Access.RestClient/AccessClientOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class AccessClientOptions
66
{
77
public const string SectionName = "Shuttle:Access:Client";
88

9-
public Uri? BaseAddress { get; set; }
9+
public string BaseAddress { get; set; } = string.Empty;
1010
public string IdentityName { get; set; } = string.Empty;
1111
public string Password { get; set; } = string.Empty;
1212
public TimeSpan RenewToleranceTimeSpan { get; set; } = TimeSpan.FromMinutes(5);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System;
2+
using Microsoft.Extensions.Options;
3+
4+
namespace Shuttle.Access.RestClient;
5+
6+
public class AccessClientOptionsValidator : IValidateOptions<AccessClientOptions>
7+
{
8+
public ValidateOptionsResult Validate(string? name, AccessClientOptions options)
9+
{
10+
if (string.IsNullOrWhiteSpace(options.BaseAddress))
11+
{
12+
return ValidateOptionsResult.Fail(string.Format(Resources.OptionMissingException, "BaseAddress"));
13+
}
14+
15+
if (!Uri.TryCreate(options.BaseAddress, UriKind.Absolute, out _))
16+
{
17+
return ValidateOptionsResult.Fail(string.Format(Resources.OptionUriException, "BaseAddress"));
18+
}
19+
20+
if (string.IsNullOrWhiteSpace(options.IdentityName))
21+
{
22+
return ValidateOptionsResult.Fail(string.Format(Resources.OptionMissingException, "IdentityName"));
23+
}
24+
25+
if (string.IsNullOrWhiteSpace(options.Password))
26+
{
27+
return ValidateOptionsResult.Fail(string.Format(Resources.OptionMissingException, "Password"));
28+
}
29+
30+
return ValidateOptionsResult.Success;
31+
}
32+
}

Shuttle.Access.RestClient/Resources.Designer.cs

Lines changed: 13 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Shuttle.Access.RestClient/Resources.resx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,12 @@
117117
<resheader name="writer">
118118
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119119
</resheader>
120-
<data name="ClientSectionException" xml:space="preserve">
121-
<value>Could not find a configuration section with name "accessClient" or "shuttle/accessClient".</value>
120+
<data name="OptionUriException" xml:space="preserve">
121+
<value>Option '{0}' is not a valid URI.</value>
122+
<comment>0 = option name</comment>
123+
</data>
124+
<data name="OptionMissingException" xml:space="preserve">
125+
<value>Option `{0}` may not be empty.</value>
126+
<comment>0 = option name</comment>
122127
</data>
123128
</root>

Shuttle.Access.RestClient/ServiceCollectionExtensions.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,21 @@ public static IServiceCollection AddAccessClient(this IServiceCollection service
1616

1717
builder?.Invoke(accessRestClientBuilder);
1818

19-
services.AddOptions<AccessClientOptions>().Configure(options =>
19+
services.Configure<AccessClientOptions>(options =>
2020
{
2121
options.BaseAddress = accessRestClientBuilder.Options.BaseAddress;
2222
options.IdentityName = accessRestClientBuilder.Options.IdentityName;
2323
options.Password = accessRestClientBuilder.Options.Password;
2424
});
2525

26+
services.AddSingleton<IValidateOptions<AccessClientOptions>, AccessClientOptionsValidator>();
27+
2628
services.AddTransient<AuthenticationHeaderHandler>();
2729
services.AddHttpClient<IAccessClient, AccessClient>("AccessClient", (serviceProvider, client) =>
2830
{
2931
var options = serviceProvider.GetRequiredService<IOptions<AccessClientOptions>>().Value;
3032

31-
client.BaseAddress = options.BaseAddress;
33+
client.BaseAddress = new(options.BaseAddress);
3234
})
3335
.AddHttpMessageHandler<AuthenticationHeaderHandler>();
3436

0 commit comments

Comments
 (0)