Skip to content

Commit 027e6ea

Browse files
committed
move HttpContext into JsonApiContext and add JsonApiDatumLinks
1 parent c6fd668 commit 027e6ea

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed

JsonApiDotNetCore/Services/JsonApiContext.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,20 @@
33
using System.Reflection;
44
using JsonApiDotNetCore.Abstractions;
55
using JsonApiDotNetCore.Routing;
6+
using Microsoft.AspNetCore.Http;
67

78
namespace JsonApiDotNetCore.Services
89
{
910
public class JsonApiContext
1011
{
12+
public HttpContext HttpContext { get; set; }
13+
public Route Route { get; set; }
14+
1115
private readonly object _dbContext;
12-
public Route Route;
1316

14-
public JsonApiContext(Route route, object dbContext)
17+
public JsonApiContext(HttpContext httpContext, Route route, object dbContext)
1518
{
19+
HttpContext = httpContext;
1620
Route = route;
1721
_dbContext = dbContext;
1822
}

JsonApiDotNetCore/Services/JsonApiService.cs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public bool HandleJsonApiRoute(HttpContext context, IServiceProvider serviceProv
4343
private void CallControllerMethod(Route route, HttpContext context)
4444
{
4545
var dbContext = _serviceProvider.GetService(_jsonApiModelConfiguration.ContextType);
46-
var jsonApiContext = new JsonApiContext(route, dbContext);
46+
var jsonApiContext = new JsonApiContext(context, route, dbContext);
4747
var controller = new JsonApiController(context, jsonApiContext);
4848

4949
switch (route.RequestMethod)
@@ -52,13 +52,13 @@ private void CallControllerMethod(Route route, HttpContext context)
5252
if (string.IsNullOrEmpty(route.ResourceId))
5353
{
5454
var result = controller.Get();
55-
result.Value = SerializeResponse(context, jsonApiContext, result.Value);
55+
result.Value = SerializeResponse(jsonApiContext, result.Value);
5656
SendResponse(context, result);
5757
}
5858
else
5959
{
6060
var result = controller.Get(route.ResourceId);
61-
result.Value = SerializeResponse(context, jsonApiContext, result.Value);
61+
result.Value = SerializeResponse(jsonApiContext, result.Value);
6262
SendResponse(context, result);
6363
}
6464
break;
@@ -76,11 +76,11 @@ private void CallControllerMethod(Route route, HttpContext context)
7676
}
7777
}
7878

79-
private string SerializeResponse(HttpContext context, JsonApiContext jsonApiContext, object resultValue)
79+
private string SerializeResponse(JsonApiContext jsonApiContext, object resultValue)
8080
{
8181
var response = new JsonApiDocument
8282
{
83-
Links = GetJsonApiDocumentLinks(context, jsonApiContext),
83+
Links = GetJsonApiDocumentLinks(jsonApiContext),
8484
Data = GetJsonApiDocumentData(jsonApiContext, resultValue)
8585
};
8686

@@ -114,13 +114,14 @@ private IJsonApiResource EntityToJsonApiResource(object entity)
114114
return (IJsonApiResource)_jsonApiModelConfiguration.ResourceMaps.Map(entity, entity.GetType(), type);
115115
}
116116

117-
private static JsonApiDatum ResourceToJsonApiDatum(JsonApiContext context, IJsonApiResource resource)
117+
private JsonApiDatum ResourceToJsonApiDatum(JsonApiContext context, IJsonApiResource resource)
118118
{
119119
return new JsonApiDatum
120120
{
121121
Type = context.Route.RouteDefinition.ContextPropertyName.ToCamelCase(),
122122
Id = resource.Id,
123-
Attributes = GetAttributesFromResource(resource)
123+
Attributes = GetAttributesFromResource(resource),
124+
Links = GetJsonApiDatumLinks(context, resource)
124125
};
125126
}
126127

@@ -140,14 +141,30 @@ private static void SendResponse(HttpContext context, ObjectResult result)
140141
context.Response.Body.Flush();
141142
}
142143

143-
private Dictionary<string, string> GetJsonApiDocumentLinks(HttpContext context, JsonApiContext jsonApiContext)
144+
private Dictionary<string, string> GetJsonApiDocumentLinks(JsonApiContext jsonApiContext)
145+
{
146+
var request = jsonApiContext.HttpContext.Request;
147+
var route = jsonApiContext.Route;
148+
149+
var links = new Dictionary<string, string>
150+
{
151+
{
152+
"self",
153+
RouteBuilder.BuildRoute(request.Scheme, request.Host.ToString(), _jsonApiModelConfiguration.Namespace,
154+
route.RouteDefinition.ContextPropertyName.ToCamelCase(), route.ResourceId)
155+
}
156+
};
157+
return links;
158+
}
159+
160+
private Dictionary<string, string> GetJsonApiDatumLinks(JsonApiContext jsonApiContext, IJsonApiResource resource)
144161
{
145162
var links = new Dictionary<string, string>
146163
{
147164
{
148165
"self",
149-
RouteBuilder.BuildRoute(context.Request.Scheme, context.Request.Host.ToString(), _jsonApiModelConfiguration.Namespace,
150-
jsonApiContext.Route.RouteDefinition.ContextPropertyName.ToCamelCase(), jsonApiContext.Route.ResourceId)
166+
RouteBuilder.BuildRoute(jsonApiContext.HttpContext.Request.Scheme, jsonApiContext.HttpContext.Request.Host.ToString(), _jsonApiModelConfiguration.Namespace,
167+
jsonApiContext.Route.RouteDefinition.ContextPropertyName.ToCamelCase(), resource.Id)
151168
}
152169
};
153170
return links;

0 commit comments

Comments
 (0)