diff --git a/Directory.Build.props b/Directory.Build.props
index 851d849..e49e299 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -17,6 +17,6 @@
README.md
MIT
- 0.4.1
+ 0.4.2
\ No newline at end of file
diff --git a/ModEndpoints.sln b/ModEndpoints.sln
index 8d1fbd9..78e7e70 100644
--- a/ModEndpoints.sln
+++ b/ModEndpoints.sln
@@ -7,6 +7,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "__SolutionItems", "__Soluti
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
Directory.Build.props = Directory.Build.props
+ LICENSE.txt = LICENSE.txt
README.md = README.md
EndProjectSection
EndProject
diff --git a/samples/Client/Program.cs b/samples/Client/Program.cs
index 069fd3c..3209c36 100644
--- a/samples/Client/Program.cs
+++ b/samples/Client/Program.cs
@@ -9,7 +9,7 @@
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
-var baseAddress = "https://localhost:7012/api/v1/storesWithServiceEndpoint/";
+var baseAddress = "https://localhost:7012/api/";
var clientName = "ShowcaseApi.Client";
//builder.Services.AddRemoteServiceWithNewClient(clientName,
// (sp, client) =>
@@ -48,7 +48,10 @@ static async Task CallRemoteServicesAsync(IServiceProvider hostProvider)
//resolve service channel from DI
var channel = provider.GetRequiredService();
//send request over channel to remote ServiceResultEndpoint
- var listResult = await channel.SendAsync(new ListStoresRequest(), default);
+ var listResult = await channel.SendAsync(
+ new ListStoresRequest(),
+ default,
+ endpointUriPrefix: "v1/storesWithServiceEndpoint/");
if (listResult.IsOk)
{
@@ -57,7 +60,10 @@ static async Task CallRemoteServicesAsync(IServiceProvider hostProvider)
if (id is not null)
{
//send request over channel to remote ServiceResultEndpoint
- var getResult = await channel.SendAsync(new GetStoreByIdRequest(Id: id.Value), default);
+ var getResult = await channel.SendAsync(
+ new GetStoreByIdRequest(Id: id.Value),
+ default,
+ endpointUriPrefix: "v1/storesWithServiceEndpoint/");
if (getResult.IsOk)
{
Console.WriteLine(getResult.Value);
diff --git a/src/ModEndpoints.RemoteServices/IServiceChannel.cs b/src/ModEndpoints.RemoteServices/IServiceChannel.cs
index 01a46ea..11487f4 100644
--- a/src/ModEndpoints.RemoteServices/IServiceChannel.cs
+++ b/src/ModEndpoints.RemoteServices/IServiceChannel.cs
@@ -9,6 +9,7 @@ public interface IServiceChannel
Task> SendAsync(
TRequest req,
CancellationToken ct,
+ string? endpointUriPrefix = null,
MediaTypeHeaderValue? mediaType = null,
JsonSerializerOptions? jsonSerializerOptions = null,
Action? configureRequestHeaders = null,
@@ -18,6 +19,7 @@ Task> SendAsync(
Task SendAsync(
TRequest req,
CancellationToken ct,
+ string? endpointUriPrefix = null,
MediaTypeHeaderValue? mediaType = null,
JsonSerializerOptions? jsonSerializerOptions = null,
Action? configureRequestHeaders = null,
diff --git a/src/ModEndpoints.RemoteServices/ServiceChannel.cs b/src/ModEndpoints.RemoteServices/ServiceChannel.cs
index 7336dec..e39140c 100644
--- a/src/ModEndpoints.RemoteServices/ServiceChannel.cs
+++ b/src/ModEndpoints.RemoteServices/ServiceChannel.cs
@@ -17,6 +17,7 @@ public class ServiceChannel(
public async Task> SendAsync(
TRequest req,
CancellationToken ct,
+ string? endpointUriPrefix = null,
MediaTypeHeaderValue? mediaType = null,
JsonSerializerOptions? jsonSerializerOptions = null,
Action? configureRequestHeaders = null,
@@ -39,7 +40,9 @@ public async Task> SendAsync(
{
return Result.CriticalError(string.Format(NoChannelRegistrationFound, typeof(TRequest)));
}
- using (HttpRequestMessage httpReq = new(HttpMethod.Post, requestUriResult.Value))
+ using (HttpRequestMessage httpReq = new(
+ HttpMethod.Post,
+ ServiceChannel.Combine(endpointUriPrefix, requestUriResult.Value)))
{
httpReq.Content = JsonContent.Create(req, mediaType, jsonSerializerOptions);
configureRequestHeaders?.Invoke(httpReq.Headers);
@@ -60,6 +63,7 @@ public async Task> SendAsync(
public async Task SendAsync(
TRequest req,
CancellationToken ct,
+ string? endpointUriPrefix = null,
MediaTypeHeaderValue? mediaType = null,
JsonSerializerOptions? jsonSerializerOptions = null,
Action? configureRequestHeaders = null,
@@ -81,7 +85,9 @@ public async Task SendAsync(
{
return Result.CriticalError(string.Format(NoChannelRegistrationFound, typeof(TRequest)));
}
- using (HttpRequestMessage httpReq = new(HttpMethod.Post, requestUriResult.Value))
+ using (HttpRequestMessage httpReq = new(
+ HttpMethod.Post,
+ ServiceChannel.Combine(endpointUriPrefix, requestUriResult.Value)))
{
httpReq.Content = JsonContent.Create(req, mediaType, jsonSerializerOptions);
configureRequestHeaders?.Invoke(httpReq.Headers);
@@ -98,4 +104,16 @@ public async Task SendAsync(
return ex;
}
}
+
+ private static string Combine(string? endpointUriPrefix, string endpointUri)
+ {
+ if (string.IsNullOrWhiteSpace(endpointUriPrefix))
+ {
+ return endpointUri;
+ }
+ return string.Format(
+ "{0}/{1}",
+ endpointUriPrefix.TrimEnd('/'),
+ endpointUri.TrimStart('/'));
+ }
}