diff --git a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs
index f34a732cb0..e3fd273026 100644
--- a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs
+++ b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs
@@ -8,6 +8,7 @@ using Volo.Abp;
using Volo.Abp.Castle.DynamicProxy;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.DynamicProxying;
+using Volo.Abp.Validation;
namespace Microsoft.Extensions.DependencyInjection
{
@@ -154,6 +155,9 @@ namespace Microsoft.Extensions.DependencyInjection
services.AddTransient(interceptorType);
var interceptorAdapterType = typeof(AbpAsyncDeterminationInterceptor<>).MakeGenericType(interceptorType);
+
+ var validationInterceptorAdapterType =
+ typeof(AbpAsyncDeterminationInterceptor<>).MakeGenericType(typeof(ValidationInterceptor));
if (asDefaultService)
{
@@ -162,6 +166,7 @@ namespace Microsoft.Extensions.DependencyInjection
serviceProvider => ProxyGeneratorInstance
.CreateInterfaceProxyWithoutTarget(
type,
+ (IInterceptor)serviceProvider.GetRequiredService(validationInterceptorAdapterType),
(IInterceptor)serviceProvider.GetRequiredService(interceptorAdapterType)
)
);
@@ -174,6 +179,7 @@ namespace Microsoft.Extensions.DependencyInjection
var service = ProxyGeneratorInstance
.CreateInterfaceProxyWithoutTarget(
type,
+ (IInterceptor)serviceProvider.GetRequiredService(validationInterceptorAdapterType),
(IInterceptor)serviceProvider.GetRequiredService(interceptorAdapterType)
);
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 8a5172db8b..e7198718b1 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
@@ -24,6 +24,7 @@
+
\ No newline at end of file
diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs
index f2a7540956..e98c0738fd 100644
--- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs
+++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs
@@ -3,6 +3,7 @@ using Volo.Abp.Castle;
using Volo.Abp.Modularity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading;
+using Volo.Abp.Validation;
namespace Volo.Abp.Http.Client
{
@@ -10,7 +11,8 @@ namespace Volo.Abp.Http.Client
typeof(AbpHttpModule),
typeof(AbpCastleCoreModule),
typeof(AbpThreadingModule),
- typeof(AbpMultiTenancyModule)
+ typeof(AbpMultiTenancyModule),
+ typeof(AbpValidationModule)
)]
public class AbpHttpClientModule : AbpModule
{
diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs
index 80a68e5a18..4dddcd6ce8 100644
--- a/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs
+++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo/Abp/Http/DynamicProxying/PersonAppServiceClientProxy_Tests.cs
@@ -2,6 +2,7 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
+using NSubstitute.Extensions;
using Shouldly;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Repositories;
@@ -9,6 +10,7 @@ using Volo.Abp.Http.Client;
using Volo.Abp.TestApp.Application;
using Volo.Abp.TestApp.Application.Dto;
using Volo.Abp.TestApp.Domain;
+using Volo.Abp.Validation;
using Xunit;
namespace Volo.Abp.Http.DynamicProxying
@@ -38,7 +40,8 @@ namespace Volo.Abp.Http.DynamicProxying
[Fact]
public async Task GetList()
{
- var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto()).ConfigureAwait(false);
+ var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto())
+ .ConfigureAwait(false);
people.TotalCount.ShouldBeGreaterThan(0);
people.Items.Count.ShouldBe((int) people.TotalCount);
}
@@ -59,11 +62,11 @@ namespace Volo.Abp.Http.DynamicProxying
{
var uniquePersonName = Guid.NewGuid().ToString();
- var person = await _peopleAppService.CreateAsync(new PersonDto
- {
- Name = uniquePersonName,
- Age = 42
- }
+ var person = await _peopleAppService.CreateAsync(new PersonDto
+ {
+ Name = uniquePersonName,
+ Age = 42
+ }
).ConfigureAwait(false);
person.ShouldNotBeNull();
@@ -74,7 +77,20 @@ namespace Volo.Abp.Http.DynamicProxying
personInDb.ShouldNotBeNull();
personInDb.Id.ShouldBe(person.Id);
}
-
+
+ [Fact]
+ public async Task Create_Validate_Exception()
+ {
+ await Assert.ThrowsAsync(async () =>
+ {
+ var person = await _peopleAppService.CreateAsync(new PersonDto
+ {
+ Age = 42
+ }
+ ).ConfigureAwait(false);
+ }).ConfigureAwait(false);
+ }
+
[Fact]
public async Task Update()
{
@@ -135,4 +151,4 @@ namespace Volo.Abp.Http.DynamicProxying
result.Inner1.Inner2.Value3.ShouldBe("value three");
}
}
-}
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs b/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs
index fc38b437b8..47fa69d64f 100644
--- a/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs
+++ b/framework/test/Volo.Abp.TestApp.Tests/Volo/Abp/TestApp/Application/PersonAppService_Tests.cs
@@ -19,7 +19,7 @@ namespace Volo.Abp.TestApp.Application
public PersonAppService_Tests()
{
- _peopleAppService = ServiceProvider.GetRequiredService();
+ _peopleAppService = ServiceProvider.GetRequiredService();
}
protected override void AfterAddApplication(IServiceCollection services)
@@ -31,14 +31,17 @@ namespace Volo.Abp.TestApp.Application
[Fact]
public async Task GetList()
{
- var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto()).ConfigureAwait(false);
+ var people = await _peopleAppService.GetListAsync(new PagedAndSortedResultRequestDto())
+ .ConfigureAwait(false);
people.Items.Count.ShouldBeGreaterThan(0);
}
[Fact]
public async Task Create()
{
- var personDto = await _peopleAppService.CreateAsync(new PersonDto()).ConfigureAwait(false);
+ var uniquePersonName = Guid.NewGuid().ToString();
+ var personDto = await _peopleAppService.CreateAsync(new PersonDto {Name = uniquePersonName})
+ .ConfigureAwait(false);
var repository = ServiceProvider.GetService>();
var person = await repository.FindAsync(personDto.Id).ConfigureAwait(false);
@@ -52,7 +55,9 @@ namespace Volo.Abp.TestApp.Application
{
_fakeCurrentTenant.Id.Returns(TestDataBuilder.TenantId1);
- var personDto = await _peopleAppService.CreateAsync(new PersonDto()).ConfigureAwait(false);
+ var uniquePersonName = Guid.NewGuid().ToString();
+ var personDto = await _peopleAppService.CreateAsync(new PersonDto {Name = uniquePersonName})
+ .ConfigureAwait(false);
var repository = ServiceProvider.GetService>();
var person = await repository.FindAsync(personDto.Id).ConfigureAwait(false);
@@ -63,4 +68,4 @@ namespace Volo.Abp.TestApp.Application
person.TenantId.ShouldBe(TestDataBuilder.TenantId1);
}
}
-}
+}
\ No newline at end of file
diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/Dto/PersonDto.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/Dto/PersonDto.cs
index b878b4f9c4..88ed3452af 100644
--- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/Dto/PersonDto.cs
+++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Application/Dto/PersonDto.cs
@@ -1,4 +1,5 @@
using System;
+using System.ComponentModel.DataAnnotations;
using Volo.Abp.Application.Dtos;
using Volo.Abp.MultiTenancy;
@@ -6,6 +7,7 @@ namespace Volo.Abp.TestApp.Application.Dto
{
public class PersonDto : EntityDto, IMultiTenant
{
+ [Required]
public string Name { get; set; }
public int Age { get; set; }