Skip to content

Commit a464431

Browse files
committed
respond 404 if the route is not defined
1 parent 4673653 commit a464431

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

JsonApiDotNetCore/Middleware/JsonApiMiddleware.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ public async Task Invoke(HttpContext context)
2929
_logger.LogInformation("Passing request to JsonApiService: " + context.Request.Path);
3030

3131
if(context.Request.ContentType == "application/vnd.api+json") {
32-
_router.HandleJsonApiRoute(context, _serviceProvider);
32+
var routeWasHandled = _router.HandleJsonApiRoute(context, _serviceProvider);
33+
if(!routeWasHandled)
34+
RespondNotFound(context);
3335
}
3436
else
3537
{
@@ -46,5 +48,11 @@ private void RespondUnsupportedMediaType(HttpContext context)
4648
context.Response.StatusCode = 415;
4749
context.Response.Body.Flush();
4850
}
51+
52+
private void RespondNotFound(HttpContext context)
53+
{
54+
context.Response.StatusCode = 404;
55+
context.Response.Body.Flush();
56+
}
4957
}
5058
}

JsonApiDotNetCore/Routing/RouteBuilder.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ public RouteBuilder(JsonApiModelConfiguration configuration)
2020

2121
public Route BuildFromRequest(HttpRequest request)
2222
{
23-
var remainingPathString = SetBaseRouteDefinition(request.Path);
23+
PathString remainingPathString;
24+
_baseRouteDefinition = SetBaseRouteDefinition(request.Path, out remainingPathString);
25+
26+
if(_baseRouteDefinition == null) return null;
2427

2528
var querySet = new QuerySet(request.Query);
2629

@@ -52,18 +55,18 @@ private bool PathStringIsEmpty(PathString pathString)
5255
return pathString.HasValue ? string.IsNullOrEmpty(pathString.ToString().TrimStart('/')) : true;
5356
}
5457

55-
private PathString SetBaseRouteDefinition(PathString path)
58+
private RouteDefinition SetBaseRouteDefinition(PathString path, out PathString remainingPath)
5659
{
60+
PathString remainingPathTemp;
5761
foreach (var rte in _configuration.Routes)
5862
{
59-
PathString remainingPathString;
60-
if (path.StartsWithSegments(new PathString(rte.PathString), StringComparison.OrdinalIgnoreCase, out remainingPathString))
63+
if (path.StartsWithSegments(new PathString(rte.PathString), StringComparison.OrdinalIgnoreCase, out remainingPathTemp))
6164
{
62-
_baseRouteDefinition = rte;
63-
return remainingPathString;
65+
remainingPath = remainingPathTemp;
66+
return rte;
6467
}
6568
}
66-
throw new Exception("Route is not defined.");
69+
return null;
6770
}
6871

6972
private PathString SetBaseResourceId(PathString remainPathString)

0 commit comments

Comments
 (0)