From 2878aac6892eed07086ec9ea3f35aa72b2f21969 Mon Sep 17 00:00:00 2001 From: jaredcnance Date: Fri, 7 Apr 2017 09:05:34 -0500 Subject: [PATCH 1/4] feat(dasherized-route-conv): check if controller is JsonApiController --- .../Internal/DasherizedRoutingConvention.cs | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/JsonApiDotNetCore/Internal/DasherizedRoutingConvention.cs b/src/JsonApiDotNetCore/Internal/DasherizedRoutingConvention.cs index 7732a91250..97be6aee14 100644 --- a/src/JsonApiDotNetCore/Internal/DasherizedRoutingConvention.cs +++ b/src/JsonApiDotNetCore/Internal/DasherizedRoutingConvention.cs @@ -1,5 +1,6 @@ // REF: https://github.com/aspnet/Entropy/blob/dev/samples/Mvc.CustomRoutingConvention/NameSpaceRoutingConvention.cs // REF: https://github.com/aspnet/Mvc/issues/5691 +using JsonApiDotNetCore.Controllers; using JsonApiDotNetCore.Extensions; using Microsoft.AspNetCore.Mvc.ApplicationModels; @@ -12,17 +13,28 @@ public DasherizedRoutingConvention(string nspace) { _namespace = nspace; } - + public void Apply(ApplicationModel application) { foreach (var controller in application.Controllers) - { - var template = $"{_namespace}/{controller.ControllerName.Dasherize()}"; - controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel() + { + if (IsJsonApiController(controller)) { - Template = template - }; + var template = $"{_namespace}/{controller.ControllerName.Dasherize()}"; + controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel() + { + Template = template + }; + } } } + + private bool IsJsonApiController(ControllerModel controller) + { + var controllerBaseType = controller.ControllerType.BaseType; + if(!controllerBaseType.IsConstructedGenericType) return false; + var genericTypeDefinition = controllerBaseType.GetGenericTypeDefinition(); + return (genericTypeDefinition == typeof(JsonApiController<,>) || genericTypeDefinition == typeof(JsonApiController<>)); + } } } From f9564f52fe0d7935961b7b1b33ceb3b4b62d18d9 Mon Sep 17 00:00:00 2001 From: jaredcnance Date: Fri, 7 Apr 2017 09:05:45 -0500 Subject: [PATCH 2/4] chore(csproj): bump package version --- src/JsonApiDotNetCore/JsonApiDotNetCore.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/JsonApiDotNetCore/JsonApiDotNetCore.csproj b/src/JsonApiDotNetCore/JsonApiDotNetCore.csproj index 45684b0223..b2d2bd4a6c 100755 --- a/src/JsonApiDotNetCore/JsonApiDotNetCore.csproj +++ b/src/JsonApiDotNetCore/JsonApiDotNetCore.csproj @@ -1,6 +1,6 @@  - 1.3.0 + 1.3.1 netcoreapp1.0 JsonApiDotNetCore JsonApiDotNetCore From 751f7684c8231a1ad1f8ff61d7840b533c082c91 Mon Sep 17 00:00:00 2001 From: jaredcnance Date: Sat, 8 Apr 2017 21:52:20 -0500 Subject: [PATCH 3/4] test(acceptance): can use non json-api controllers --- .../Controllers/TestValuesController.cs | 15 ++++++++ .../Extensibility/CustomControllerTests.cs | 34 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 src/JsonApiDotNetCoreExample/Controllers/TestValuesController.cs create mode 100644 test/JsonApiDotNetCoreExampleTests/Acceptance/Extensibility/CustomControllerTests.cs diff --git a/src/JsonApiDotNetCoreExample/Controllers/TestValuesController.cs b/src/JsonApiDotNetCoreExample/Controllers/TestValuesController.cs new file mode 100644 index 0000000000..fb8227c3b1 --- /dev/null +++ b/src/JsonApiDotNetCoreExample/Controllers/TestValuesController.cs @@ -0,0 +1,15 @@ +using Microsoft.AspNetCore.Mvc; + +namespace JsonApiDotNetCoreExample.Controllers +{ + [Route("[controller]")] + public class TestValuesController : Controller + { + [HttpGet] + public IActionResult Get() + { + var result = new string[] { "value" }; + return Ok(result); + } + } +} diff --git a/test/JsonApiDotNetCoreExampleTests/Acceptance/Extensibility/CustomControllerTests.cs b/test/JsonApiDotNetCoreExampleTests/Acceptance/Extensibility/CustomControllerTests.cs new file mode 100644 index 0000000000..fe84817540 --- /dev/null +++ b/test/JsonApiDotNetCoreExampleTests/Acceptance/Extensibility/CustomControllerTests.cs @@ -0,0 +1,34 @@ +using System.Net; +using System.Net.Http; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.TestHost; +using Xunit; +using JsonApiDotNetCoreExample; + +namespace JsonApiDotNetCoreExampleTests.Acceptance.Extensibility +{ + [Collection("WebHostCollection")] + public class CustomControllerTests + { + [Fact] + public async Task NonJsonApiControllers_DoNotUse_Dasherized_Routes() + { + // arrange + var builder = new WebHostBuilder() + .UseStartup(); + var httpMethod = new HttpMethod("GET"); + var route = $"testValues"; + + var server = new TestServer(builder); + var client = server.CreateClient(); + var request = new HttpRequestMessage(httpMethod, route); + + // act + var response = await client.SendAsync(request); + + // assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + } + } +} From 64c97238c55e97d69bee7ba15e1872d178e79718 Mon Sep 17 00:00:00 2001 From: jaredcnance Date: Sat, 8 Apr 2017 22:02:24 -0500 Subject: [PATCH 4/4] style --- .../Controllers/TestValuesController.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/JsonApiDotNetCoreExample/Controllers/TestValuesController.cs b/src/JsonApiDotNetCoreExample/Controllers/TestValuesController.cs index fb8227c3b1..3443d34b74 100644 --- a/src/JsonApiDotNetCoreExample/Controllers/TestValuesController.cs +++ b/src/JsonApiDotNetCoreExample/Controllers/TestValuesController.cs @@ -2,14 +2,14 @@ namespace JsonApiDotNetCoreExample.Controllers { - [Route("[controller]")] - public class TestValuesController : Controller - { - [HttpGet] - public IActionResult Get() + [Route("[controller]")] + public class TestValuesController : Controller { - var result = new string[] { "value" }; - return Ok(result); + [HttpGet] + public IActionResult Get() + { + var result = new string[] { "value" }; + return Ok(result); + } } - } }