From caa21184c5d244ba729104c7e0ffa56c54ed540b Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 5 Sep 2023 16:05:57 +0800 Subject: [PATCH] Enable nullable annotations for Volo.Abp.Http.Client --- ...viceCollectionHttpClientProxyExtensions.cs | 2 +- .../Volo.Abp.Http.Client.csproj | 2 ++ .../Authentication/IAbpAccessTokenProvider.cs | 2 +- .../NullAbpAccessTokenProvider.cs | 2 +- .../ClientProxyApiDescriptionFinder.cs | 8 +++--- .../Client/ClientProxying/ClientProxyBase.cs | 26 +++++++++---------- .../ClientProxyRequestPayloadBuilder.cs | 21 +++++++-------- .../ClientProxying/ClientProxyUrlBuilder.cs | 14 +++++----- .../ClientProxying/CurrentApiVersionInfo.cs | 6 ++--- .../IClientProxyApiDescriptionFinder.cs | 2 +- .../ClientProxying/ICurrentApiVersionInfo.cs | 4 +-- .../DynamicProxying/ApiDescriptionFinder.cs | 2 +- .../DynamicHttpProxyInterceptor.cs | 4 +-- .../Proxying/HttpActionParameterHelper.cs | 2 +- 14 files changed, 49 insertions(+), 48 deletions(-) diff --git a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs index 3f71924f9d..ab8d5974a8 100644 --- a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs +++ b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionHttpClientProxyExtensions.cs @@ -191,7 +191,7 @@ public static class ServiceCollectionHttpClientProxyExtensions return Activator.CreateInstance( typeof(HttpClientProxy<>).MakeGenericType(type), service - ); + )!; }); return services; diff --git a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj index 0b4e3ad76f..0b05d8b1c7 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj +++ b/framework/src/Volo.Abp.Http.Client/Volo.Abp.Http.Client.csproj @@ -5,6 +5,8 @@ netstandard2.0;netstandard2.1;net7.0 + enable + Nullable Volo.Abp.Http.Client Volo.Abp.Http.Client $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs index a4e9e650e3..ceadc832ec 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/IAbpAccessTokenProvider.cs @@ -4,5 +4,5 @@ namespace Volo.Abp.Http.Client.Authentication; public interface IAbpAccessTokenProvider { - Task GetTokenAsync(); + Task GetTokenAsync(); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs index 6bd7e6344b..47ae349bf0 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Authentication/NullAbpAccessTokenProvider.cs @@ -5,7 +5,7 @@ namespace Volo.Abp.Http.Client.Authentication; public class NullAbpAccessTokenProvider : IAbpAccessTokenProvider, ITransientDependency { - public Task GetTokenAsync() + public Task GetTokenAsync() { return Task.FromResult(null as string); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs index f7b9b838b5..e8da52f3b1 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyApiDescriptionFinder.cs @@ -17,7 +17,7 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, protected IVirtualFileProvider VirtualFileProvider { get; } protected IJsonSerializer JsonSerializer { get; } protected Dictionary ActionApiDescriptionModels { get; } - protected ApplicationApiDescriptionModel ApplicationApiDescriptionModel { get; set; } + protected ApplicationApiDescriptionModel ApplicationApiDescriptionModel { get; set; } = default!; public ClientProxyApiDescriptionFinder( IVirtualFileProvider virtualFileProvider, @@ -30,7 +30,7 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, Initialize(); } - public ActionApiDescriptionModel FindAction(string methodName) + public ActionApiDescriptionModel? FindAction(string methodName) { return ActionApiDescriptionModels.ContainsKey(methodName) ? ActionApiDescriptionModels[methodName] : null; } @@ -113,7 +113,7 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, return rootPath + physicalDirectoryInfo.Name.EnsureStartsWith('/'); } - return fileInfo.PhysicalPath; + return fileInfo.PhysicalPath!; } private string GetProxyFileInfoPath(string rootPath, IFileInfo fileInfo) @@ -123,6 +123,6 @@ public class ClientProxyApiDescriptionFinder : IClientProxyApiDescriptionFinder, return rootPath + physicalFileInfo.Name.EnsureStartsWith('/'); } - return fileInfo.GetVirtualOrPhysicalPathOrNull(); + return fileInfo.GetVirtualOrPhysicalPathOrNull()!; } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs index 5c1d893bfd..8dee0fcc3e 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyBase.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Http.Client.ClientProxying; public class ClientProxyBase : ITransientDependency { - public IAbpLazyServiceProvider LazyServiceProvider { get; set; } + public IAbpLazyServiceProvider LazyServiceProvider { get; set; } = default!; protected IClientProxyApiDescriptionFinder ClientProxyApiDescriptionFinder => LazyServiceProvider.LazyGetRequiredService(); protected ICancellationTokenProvider CancellationTokenProvider => LazyServiceProvider.LazyGetRequiredService(); @@ -42,17 +42,17 @@ public class ClientProxyBase : ITransientDependency protected ICurrentApiVersionInfo CurrentApiVersionInfo => LazyServiceProvider.LazyGetRequiredService(); protected ILocalEventBus LocalEventBus => LazyServiceProvider.LazyGetRequiredService(); - protected virtual async Task RequestAsync(string methodName, ClientProxyRequestTypeValue arguments = null) + protected virtual async Task RequestAsync(string methodName, ClientProxyRequestTypeValue? arguments = null) { await RequestAsync(BuildHttpProxyClientProxyContext(methodName, arguments)); } - protected virtual async Task RequestAsync(string methodName, ClientProxyRequestTypeValue arguments = null) + protected virtual async Task RequestAsync(string methodName, ClientProxyRequestTypeValue? arguments = null) { return await RequestAsync(BuildHttpProxyClientProxyContext(methodName, arguments)); } - protected virtual ClientProxyRequestContext BuildHttpProxyClientProxyContext(string methodName, ClientProxyRequestTypeValue arguments = null) + protected virtual ClientProxyRequestContext BuildHttpProxyClientProxyContext(string methodName, ClientProxyRequestTypeValue? arguments = null) { if (arguments == null) { @@ -67,7 +67,7 @@ public class ClientProxyBase : ITransientDependency } var actionArguments = action.Parameters.GroupBy(x => x.NameOnMethod).ToList(); - if (action.SupportedVersions.Any()) + if (action.SupportedVersions != null && action.SupportedVersions.Any()) { //TODO: make names configurable actionArguments.RemoveAll(x => x.Key == "api-version" || x.Key == "apiVersion"); @@ -107,7 +107,7 @@ public class ClientProxyBase : ITransientDependency if (stringContent.IsNullOrWhiteSpace()) { - return default; + return default!; } return JsonSerializer.Deserialize(stringContent); @@ -177,7 +177,7 @@ public class ClientProxyBase : ITransientDependency var versionParam = requestContext.Action.Parameters.FirstOrDefault(p => p.Name == "apiVersion" && p.BindingSourceId == ParameterBindingSources.Path) ?? requestContext.Action.Parameters.FirstOrDefault(p => p.Name == "api-version" && p.BindingSourceId == ParameterBindingSources.Query); - return new ApiVersionInfo(versionParam?.BindingSourceId, apiVersion); + return new ApiVersionInfo(versionParam?.BindingSourceId!, apiVersion); } protected virtual async Task GetUrlWithParametersAsync(ClientProxyRequestContext requestContext, ApiVersionInfo apiVersion) @@ -185,7 +185,7 @@ public class ClientProxyBase : ITransientDependency return await ClientProxyUrlBuilder.GenerateUrlWithParametersAsync(requestContext.Action, requestContext.Arguments, apiVersion); } - protected virtual async Task GetHttpContentAsync(ClientProxyRequestContext requestContext, ApiVersionInfo apiVersion) + protected virtual async Task GetHttpContentAsync(ClientProxyRequestContext requestContext, ApiVersionInfo apiVersion) { return await ClientProxyRequestPayloadBuilder.BuildContentAsync(requestContext.Action, requestContext.Arguments, JsonSerializer, apiVersion); } @@ -199,15 +199,15 @@ public class ClientProxyBase : ITransientDependency return configuredVersion ?? "1.0"; } - if (requestContext.Action.SupportedVersions.Contains(configuredVersion)) + if (requestContext.Action.SupportedVersions!.Contains(configuredVersion!)) { - return configuredVersion; + return configuredVersion!; } return requestContext.Action.SupportedVersions.Last(); //TODO: Ensure to get the latest version! } - protected virtual async Task GetConfiguredApiVersionAsync(ClientProxyRequestContext requestContext) + protected virtual async Task GetConfiguredApiVersionAsync(ClientProxyRequestContext requestContext) { var clientConfig = ClientOptions.Value.HttpClientProxies.GetOrDefault(requestContext.ServiceType) ?? throw new AbpException($"Could not get DynamicHttpClientProxyConfig for {requestContext.ServiceType.FullName}."); @@ -220,8 +220,8 @@ public class ClientProxyBase : ITransientDependency { await LocalEventBus.PublishAsync(new ClientProxyExceptionEventData() { - StatusCode = (int?)response?.StatusCode, - ReasonPhrase = response?.ReasonPhrase + StatusCode = (int?)response.StatusCode, + ReasonPhrase = response.ReasonPhrase }); if (response.Headers.Contains(AbpHttpConsts.AbpErrorFormat)) diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs index abbbb8b6f1..d7755a1ac9 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyRequestPayloadBuilder.cs @@ -40,8 +40,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency HttpClientProxyingOptions = httpClientProxyingOptions.Value; } - [CanBeNull] - public virtual async Task BuildContentAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer, ApiVersionInfo apiVersion) + public virtual async Task BuildContentAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer, ApiVersionInfo apiVersion) { var body = await GenerateBodyAsync(action, methodArguments, jsonSerializer); if (body != null) @@ -54,7 +53,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency return body; } - protected virtual Task GenerateBodyAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer) + protected virtual Task GenerateBodyAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, IJsonSerializer jsonSerializer) { var parameters = action .Parameters @@ -63,7 +62,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency if (parameters.Length <= 0) { - return Task.FromResult(null); + return Task.FromResult(null); } if (parameters.Length > 1) @@ -76,13 +75,13 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency var value = HttpActionParameterHelper.FindParameterValue(methodArguments, parameters[0]); if (value == null) { - return Task.FromResult(null); + return Task.FromResult(null); } - return Task.FromResult(new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json)); + return Task.FromResult(new StringContent(jsonSerializer.Serialize(value), Encoding.UTF8, MimeTypes.Application.Json)); } - protected virtual async Task GenerateFormPostDataAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments) + protected virtual async Task GenerateFormPostDataAsync(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments) { var parameters = action .Parameters @@ -108,7 +107,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency { using (var scope = ServiceScopeFactory.CreateScope()) { - var formDataContents = await (Task>>)CallObjectToFormDataAsyncMethod + var formDataContents = await (Task>?>)CallObjectToFormDataAsyncMethod .MakeGenericMethod(value.GetType()) .Invoke(this, new object[] { @@ -116,7 +115,7 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency action, parameter, value - }); + })!; if (formDataContents != null) { @@ -158,12 +157,12 @@ public class ClientProxyRequestPayloadBuilder : ITransientDependency { foreach (var item in (IEnumerable) value) { - formData.Add(new StringContent(item.ToString(), Encoding.UTF8), parameter.Name); + formData.Add(new StringContent(item.ToString()!, Encoding.UTF8), parameter.Name); } } else { - formData.Add(new StringContent(value.ToString(), Encoding.UTF8), parameter.Name); + formData.Add(new StringContent(value.ToString()!, Encoding.UTF8), parameter.Name); } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs index 63ddd75510..65703dc56b 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ClientProxyUrlBuilder.cs @@ -100,15 +100,15 @@ public class ClientProxyUrlBuilder : ITransientDependency { using (var scope = ServiceScopeFactory.CreateScope()) { - var path = await (Task)CallObjectToPathAsyncMethod + var path = await (Task)CallObjectToPathAsyncMethod .MakeGenericMethod(value.GetType()) - .Invoke(this, new object[] + .Invoke(this, new object?[] { scope.ServiceProvider.GetRequiredService(HttpClientProxyingOptions.PathConverts[value.GetType()]), action, pathParameter, value - }); + })!; if (path != null) { @@ -143,7 +143,7 @@ public class ClientProxyUrlBuilder : ITransientDependency { using (var scope = ServiceScopeFactory.CreateScope()) { - var queryString = await (Task)CallObjectToQueryStringAsyncMethod + var queryString = await (Task)CallObjectToQueryStringAsyncMethod .MakeGenericMethod(value.GetType()) .Invoke(this, new object[] { @@ -151,7 +151,7 @@ public class ClientProxyUrlBuilder : ITransientDependency action, queryStringParameter, value - }); + })!; if (queryString != null) { @@ -218,11 +218,11 @@ public class ClientProxyUrlBuilder : ITransientDependency return true; } - protected virtual Task ConvertValueToStringAsync([CanBeNull] object value) + protected virtual Task ConvertValueToStringAsync(object? value) { if (value is DateTime dateTimeValue) { - return Task.FromResult(dateTimeValue.ToUniversalTime().ToString("O")); + return Task.FromResult(dateTimeValue.ToUniversalTime().ToString("O"))!; } return Task.FromResult(value?.ToString()); diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/CurrentApiVersionInfo.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/CurrentApiVersionInfo.cs index f56e9e893a..7c0bac4c81 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/CurrentApiVersionInfo.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/CurrentApiVersionInfo.cs @@ -6,11 +6,11 @@ namespace Volo.Abp.Http.Client.ClientProxying; public class CurrentApiVersionInfo : ICurrentApiVersionInfo, ISingletonDependency { - public ApiVersionInfo ApiVersionInfo => _currentApiVersionInfo.Value; + public ApiVersionInfo? ApiVersionInfo => _currentApiVersionInfo.Value; - private readonly AsyncLocal _currentApiVersionInfo = new AsyncLocal(); + private readonly AsyncLocal _currentApiVersionInfo = new AsyncLocal(); - public virtual IDisposable Change(ApiVersionInfo apiVersionInfo) + public virtual IDisposable Change(ApiVersionInfo? apiVersionInfo) { var parent = ApiVersionInfo; _currentApiVersionInfo.Value = apiVersionInfo; diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/IClientProxyApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/IClientProxyApiDescriptionFinder.cs index baf1d6facf..4394b92bcc 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/IClientProxyApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/IClientProxyApiDescriptionFinder.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.Http.Client.ClientProxying; public interface IClientProxyApiDescriptionFinder { - ActionApiDescriptionModel FindAction(string methodName); + ActionApiDescriptionModel? FindAction(string methodName); ApplicationApiDescriptionModel GetApiDescription(); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ICurrentApiVersionInfo.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ICurrentApiVersionInfo.cs index 9a8fe264bf..e5ac53fafe 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ICurrentApiVersionInfo.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/ClientProxying/ICurrentApiVersionInfo.cs @@ -4,7 +4,7 @@ namespace Volo.Abp.Http.Client.ClientProxying; public interface ICurrentApiVersionInfo { - ApiVersionInfo ApiVersionInfo { get; } + ApiVersionInfo? ApiVersionInfo { get; } - IDisposable Change(ApiVersionInfo apiVersionInfo); + IDisposable Change(ApiVersionInfo? apiVersionInfo); } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs index f01ada7127..44f005add9 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs @@ -118,7 +118,7 @@ public class ApiDescriptionFinder : IApiDescriptionFinder, ITransientDependency var content = await response.Content.ReadAsStringAsync(); - var result = JsonSerializer.Deserialize(content, DeserializeOptions); + var result = JsonSerializer.Deserialize(content, DeserializeOptions)!; return result; } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs index 9c30c84496..0f5a9e3642 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/DynamicHttpProxyInterceptor.cs @@ -66,7 +66,7 @@ public class DynamicHttpProxyInterceptor : AbpInterceptor, ITransientD var returnType = invocation.Method.ReturnType.GenericTypeArguments[0]; var result = (Task)CallRequestAsyncMethod .MakeGenericMethod(returnType) - .Invoke(this, new object[] { context }); + .Invoke(this, new object[] { context })!; invocation.ReturnValue = await GetResultAsync(result, returnType); } @@ -99,6 +99,6 @@ public class DynamicHttpProxyInterceptor : AbpInterceptor, ITransientD .MakeGenericType(resultType) .GetProperty(nameof(Task.Result), BindingFlags.Instance | BindingFlags.Public); Check.NotNull(resultProperty, nameof(resultProperty)); - return resultProperty.GetValue(task); + return resultProperty!.GetValue(task)!; } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpActionParameterHelper.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpActionParameterHelper.cs index d5d5c4d971..f9fc79b81f 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpActionParameterHelper.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/Proxying/HttpActionParameterHelper.cs @@ -6,7 +6,7 @@ namespace Volo.Abp.Http.Client.Proxying; internal static class HttpActionParameterHelper { - public static object FindParameterValue(IReadOnlyDictionary methodArguments, ParameterApiDescriptionModel apiParameter) + public static object? FindParameterValue(IReadOnlyDictionary methodArguments, ParameterApiDescriptionModel apiParameter) { var value = methodArguments.GetOrDefault(apiParameter.NameOnMethod); if (value == null)