Skip to content

Commit 06ec8a7

Browse files
committed
fix(routing-convention): do not try to infer routing
1 parent a3e0268 commit 06ec8a7

File tree

5 files changed

+23
-31
lines changed

5 files changed

+23
-31
lines changed

src/JsonApiDotNetCore/Data/DefaultEntityRepository.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ public virtual IQueryable<TEntity> Filter(IQueryable<TEntity> entities, FilterQ
5959

6060
if(filterQuery.IsAttributeOfRelationship)
6161
return entities.Filter(new RelatedAttrFilterQuery(_jsonApiContext, filterQuery));
62-
else
63-
return entities.Filter(new AttrFilterQuery(_jsonApiContext, filterQuery));
62+
63+
return entities.Filter(new AttrFilterQuery(_jsonApiContext, filterQuery));
6464
}
6565

6666
public virtual IQueryable<TEntity> Sort(IQueryable<TEntity> entities, List<SortQuery> sortQueries)

src/JsonApiDotNetCore/Extensions/IQueryableExtensions.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,12 +177,9 @@ private static Expression GetFilterExpressionLambda(Expression left, Expression
177177
return body;
178178
}
179179

180-
181-
public static IQueryable<TSource> Select<TSource>(this IQueryable<TSource> source, IEnumerable<string> columns)
180+
public static IQueryable<TSource> Select<TSource>(this IQueryable<TSource> source, List<string> columns)
182181
{
183-
var enumeratedColumns = columns as IList<string> ?? columns.ToList();
184-
185-
if (columns == null || enumeratedColumns.Any() == false)
182+
if (columns == null || columns.Any() == false)
186183
return source;
187184

188185
var sourceType = source.ElementType;
@@ -192,7 +189,7 @@ public static IQueryable<TSource> Select<TSource>(this IQueryable<TSource> sourc
192189
// {model}
193190
var parameter = Expression.Parameter(sourceType, "model");
194191

195-
var bindings = enumeratedColumns.Select(column => Expression.Bind(
192+
var bindings = columns.Select(column => Expression.Bind(
196193
resultType.GetProperty(column), Expression.PropertyOrField(parameter, column)));
197194

198195
// { new Model () { Property = model.Property } }

src/JsonApiDotNetCore/Internal/DasherizedRoutingConvention.cs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
using System.Reflection;
44
using JsonApiDotNetCore.Controllers;
55
using JsonApiDotNetCore.Extensions;
6-
using Microsoft.AspNetCore.Mvc;
76
using Microsoft.AspNetCore.Mvc.ApplicationModels;
87

98
namespace JsonApiDotNetCore.Internal
@@ -20,11 +19,11 @@ public void Apply(ApplicationModel application)
2019
{
2120
foreach (var controller in application.Controllers)
2221
{
23-
var template = IsDasherizedJsonApiController(controller)
24-
? $"{_namespace}/{controller.ControllerName.Dasherize()}"
25-
: GetTemplate(controller);
22+
if (IsDasherizedJsonApiController(controller) == false)
23+
continue;
2624

27-
controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel()
25+
var template = $"{_namespace}/{controller.ControllerName.Dasherize()}";
26+
controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel
2827
{
2928
Template = template
3029
};
@@ -37,14 +36,5 @@ private bool IsDasherizedJsonApiController(ControllerModel controller)
3736
var notDisabled = type.GetCustomAttribute<DisableRoutingConventionAttribute>() == null;
3837
return notDisabled && type.IsSubclassOf(typeof(JsonApiControllerMixin));
3938
}
40-
41-
private string GetTemplate(ControllerModel controller)
42-
{
43-
var type = controller.ControllerType;
44-
var routeAttr = type.GetCustomAttribute<RouteAttribute>();
45-
return routeAttr != null
46-
? routeAttr.Template
47-
: controller.ControllerName;
48-
}
4939
}
5040
}

src/JsonApiDotNetCoreExample/Controllers/CamelCasedModelsController.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using JsonApiDotNetCore.Controllers;
22
using JsonApiDotNetCore.Services;
33
using JsonApiDotNetCoreExample.Models;
4+
using Microsoft.AspNetCore.Mvc;
45
using Microsoft.Extensions.Logging;
56

67
namespace JsonApiDotNetCoreExample.Controllers
78
{
9+
[Route("[controller]")]
810
[DisableRoutingConvention]
911
public class CamelCasedModelsController : JsonApiController<CamelCasedModel>
1012
{

test/JsonApiDotNetCoreExampleTests/Acceptance/Spec/SparseFieldSetTests.cs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System.Threading.Tasks;
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Threading.Tasks;
24
using DotNetCoreDocs;
35
using DotNetCoreDocs.Writers;
46
using JsonApiDotNetCoreExample;
@@ -14,6 +16,7 @@
1416
using Newtonsoft.Json;
1517
using JsonApiDotNetCore.Models;
1618
using JsonApiDotNetCoreExampleTests.Helpers.Extensions;
19+
using StringExtensions = JsonApiDotNetCoreExampleTests.Helpers.Extensions.StringExtensions;
1720

1821
namespace JsonApiDotNetCoreExampleTests.Acceptance.Spec
1922
{
@@ -33,26 +36,26 @@ public SparseFieldSetTests(DocsFixture<Startup, JsonDocWriter> fixture)
3336
public async Task Can_Select_Sparse_Fieldsets()
3437
{
3538
// arrange
36-
var fields = new string[] { "Id", "Description", "CreatedDate", "AchievedDate" };
39+
var fields = new List<string> { "Id", "Description", "CreatedDate", "AchievedDate" };
3740
var todoItem = new TodoItem {
3841
Description = "description",
3942
Ordinal = 1,
40-
CreatedDate = System.DateTime.Now,
41-
AchievedDate = System.DateTime.Now.AddDays(2)
43+
CreatedDate = DateTime.Now,
44+
AchievedDate = DateTime.Now.AddDays(2)
4245
};
4346
_dbContext.TodoItems.Add(todoItem);
4447
await _dbContext.SaveChangesAsync();
45-
var expectedSql = $@"SELECT 't'.'Id', 't'.'Description', 't'.'CreatedDate', 't'.'AchievedDate'
48+
var expectedSql = StringExtensions.Normalize($@"SELECT 't'.'Id', 't'.'Description', 't'.'CreatedDate', 't'.'AchievedDate'
4649
FROM 'TodoItems' AS 't'
47-
WHERE 't'.'Id' = {todoItem.Id}".Normalize();
50+
WHERE 't'.'Id' = {todoItem.Id}");
4851

4952
// act
5053
var query = _dbContext
5154
.TodoItems
5255
.Where(t=>t.Id == todoItem.Id)
5356
.Select(fields);
5457

55-
var resultSql = query.ToSql().Normalize();
58+
var resultSql = StringExtensions.Normalize(query.ToSql());
5659
var result = await query.FirstAsync();
5760

5861
// assert
@@ -70,7 +73,7 @@ public async Task Fields_Query_Selects_Sparse_Field_Sets()
7073
var todoItem = new TodoItem {
7174
Description = "description",
7275
Ordinal = 1,
73-
CreatedDate = System.DateTime.Now
76+
CreatedDate = DateTime.Now
7477
};
7578
_dbContext.TodoItems.Add(todoItem);
7679
await _dbContext.SaveChangesAsync();
@@ -93,7 +96,7 @@ public async Task Fields_Query_Selects_Sparse_Field_Sets()
9396
Assert.Equal(todoItem.StringId, deserializeBody.Data.Id);
9497
Assert.Equal(2, deserializeBody.Data.Attributes.Count);
9598
Assert.Equal(todoItem.Description, deserializeBody.Data.Attributes["description"]);
96-
Assert.Equal(todoItem.CreatedDate, deserializeBody.Data.Attributes["created-date"]);
99+
Assert.Equal(todoItem.CreatedDate.ToString("G"), ((DateTime)deserializeBody.Data.Attributes["created-date"]).ToString("G"));
97100
}
98101
}
99102
}

0 commit comments

Comments
 (0)