diff --git a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAppServiceConvention.cs b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAppServiceConvention.cs index 31dc3b5cdb..f83a397707 100644 --- a/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAppServiceConvention.cs +++ b/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/AbpAppServiceConvention.cs @@ -78,6 +78,12 @@ namespace Volo.Abp.AspNetCore.Mvc protected virtual void ConfigureParameters(ControllerModel controller) { + /* Default binding system of Asp.Net Core for a parameter + * 1. Form values + * 2. Route values. + * 3. Query string. + */ + foreach (var action in controller.Actions) { foreach (var prm in action.Parameters) @@ -250,7 +256,10 @@ namespace Volo.Abp.AspNetCore.Mvc protected virtual AttributeRouteModel CreateAbpServiceAttributeRouteModel(string moduleName, string controllerName, ActionModel action, string httpMethod) { - var url = $"api/services/{moduleName}/{controllerName}/{action.ActionName}"; + var url = $"api/{moduleName}/{controllerName}/{action.ActionName}"; + + + return new AttributeRouteModel(new RouteAttribute(url)); } diff --git a/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs b/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs index 9174e912c5..8e48504fdd 100644 --- a/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs +++ b/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/PersonAppService_Tests.cs @@ -35,7 +35,7 @@ namespace Volo.Abp.AspNetCore.Mvc public async Task GetAll_Test() { //Ideally should be [GET] /api/app/person - var result = await GetResponseAsObjectAsync>("/api/services/app/person/GetAll"); + var result = await GetResponseAsObjectAsync>("/api/app/person/GetAll"); result.Items.Count.ShouldBeGreaterThan(0); } @@ -45,7 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc var firstPerson = _personRepository.GetList().First(); //Ideally should be [GET] /api/app/person/{id} - var result = await GetResponseAsObjectAsync("/api/services/app/person/Get?id=" + firstPerson.Id); + var result = await GetResponseAsObjectAsync("/api/app/person/Get?id=" + firstPerson.Id); result.Name.ShouldBe(firstPerson.Name); } @@ -55,7 +55,7 @@ namespace Volo.Abp.AspNetCore.Mvc var firstPerson = _personRepository.GetList().First(); //Ideally should be [DELETE] /api/app/person/{id} - await Client.DeleteAsync("/api/services/app/person/Delete?id=" + firstPerson.Id); + await Client.DeleteAsync("/api/app/person/Delete?id=" + firstPerson.Id); (await _personRepository.FindAsync(firstPerson.Id)).ShouldBeNull(); } @@ -69,7 +69,7 @@ namespace Volo.Abp.AspNetCore.Mvc //Ideally should be [POST] /api/app/person var response = await Client.PostAsync( - "/api/services/app/person/Create", + "/api/app/person/Create", new StringContent(postData, Encoding.UTF8, "application/json") ); @@ -102,7 +102,7 @@ namespace Volo.Abp.AspNetCore.Mvc //Ideally should be [PUT] /api/app/person/{id} var response = await Client.PutAsync( - "/api/services/app/person/Update?id=" + updateDto.Id, + "/api/app/person/Update?id=" + updateDto.Id, new StringContent(putData, Encoding.UTF8, "application/json") ); @@ -136,7 +136,7 @@ namespace Volo.Abp.AspNetCore.Mvc //Ideally should be [POST] /api/people/{id}/phones var response = await Client.PostAsync( - "/api/services/app/person/AddPhone?id=" + personToAddNewPhone.Id, + "/api/app/person/AddPhone?id=" + personToAddNewPhone.Id, new StringContent(postData, Encoding.UTF8, "application/json") ); @@ -160,7 +160,7 @@ namespace Volo.Abp.AspNetCore.Mvc var douglas = _personRepository.GetList().First(p => p.Name == "Douglas"); //Ideally should be [GET] /api/person/{id}/phones?type=office - var result = await GetResponseAsObjectAsync>("/api/services/app/person/GetPhones?id=" + douglas.Id); + var result = await GetResponseAsObjectAsync>("/api/app/person/GetPhones?id=" + douglas.Id); result.Items.Count.ShouldBe(douglas.Phones.Count); } @@ -171,7 +171,7 @@ namespace Volo.Abp.AspNetCore.Mvc var firstPhone = douglas.Phones.First(); //Ideally should be [DELETE] /api/app/person/{id} - await Client.DeleteAsync("/api/services/app/person/DeletePhone?id=" + douglas.Id + "&phoneId=" + firstPhone.Id); + await Client.DeleteAsync("/api/app/person/DeletePhone?id=" + douglas.Id + "&phoneId=" + firstPhone.Id); douglas = _personRepository.GetList().First(p => p.Name == "Douglas"); douglas.Phones.Any(p => p.Id == firstPhone.Id).ShouldBeFalse();