wip · Eclarian/JSONAPI.NET@feb6d29 · GitHub
Skip to content

Commit feb6d29

Browse files
author
Chris Santero
committed
wip
1 parent 5f31e4b commit feb6d29

10 files changed

Lines changed: 73 additions & 168 deletions

JSONAPI.Tests/ActionFilters/FallbackPayloadBuilderAttributeTests.cs

Lines changed: 29 additions & 0 deletions

JSONAPI.Tests/JSONAPI.Tests.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@
9090
<Compile Include="Core\ResourceTypeRegistryTests.cs" />
9191
<Compile Include="Extensions\TypeExtensionsTests.cs" />
9292
<Compile Include="Http\PascalizedControllerSelectorTests.cs" />
93-
<Compile Include="Json\ErrorSerializerTests.cs" />
9493
<Compile Include="Json\JsonApiFormatterTests.cs" />
9594
<Compile Include="Json\LinkTemplateTests.cs" />
9695
<Compile Include="Models\Author.cs" />

JSONAPI.Tests/Json/ErrorSerializerTests.cs

Lines changed: 0 additions & 67 deletions
This file was deleted.

JSONAPI.Tests/Json/JsonApiFormatterTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
using System.Diagnostics;
1515
using JSONAPI.Payload;
1616
using Moq;
17-
using IErrorSerializer = JSONAPI.Json.IErrorSerializer;
1817

1918
namespace JSONAPI.Tests.Json
2019
{

JSONAPI/ActionFilters/FallbackPayloadBuilderAttribute.cs

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Net.Http;
55
using System.Threading;
66
using System.Threading.Tasks;
7+
using System.Web.Http;
78
using System.Web.Http.Filters;
89
using JSONAPI.Json;
910
using JSONAPI.Payload;
@@ -59,25 +60,33 @@ public override async Task OnActionExecutedAsync(HttpActionExecutedContext actio
5960
return;
6061
}
6162

62-
var payloadValue = objectContent.Value;
63+
object payloadValue;
6364
if (actionExecutedContext.Exception != null)
6465
{
6566
payloadValue = _errorPayloadBuilder.BuildFromException(actionExecutedContext.Exception);
6667
}
6768
else
6869
{
69-
try
70+
var httpError = objectContent.Value as HttpError;
71+
if (httpError != null)
7072
{
71-
payloadValue =
72-
await _fallbackPayloadBuilder.BuildPayload(payloadValue, actionExecutedContext.Request, cancellationToken);
73+
payloadValue = _errorPayloadBuilder.BuildFromHttpError(httpError, actionExecutedContext.Response.StatusCode);
7374
}
74-
catch (JsonApiException ex)
75+
else
7576
{
76-
payloadValue = _errorPayloadBuilder.BuildFromException(ex);
77-
}
78-
catch (Exception ex)
79-
{
80-
payloadValue = _errorPayloadBuilder.BuildFromException(ex);
77+
try
78+
{
79+
payloadValue =
80+
await _fallbackPayloadBuilder.BuildPayload(objectContent.Value, actionExecutedContext.Request, cancellationToken);
81+
}
82+
catch (JsonApiException ex)
83+
{
84+
payloadValue = _errorPayloadBuilder.BuildFromException(ex);
85+
}
86+
catch (Exception ex)
87+
{
88+
payloadValue = _errorPayloadBuilder.BuildFromException(ex);
89+
}
8190
}
8291
}
8392

JSONAPI/JSONAPI.csproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,8 @@
121121
<Compile Include="Payload\ILinkSerializer.cs" />
122122
<Compile Include="Payload\IMetadata.cs" />
123123
<Compile Include="Payload\ILink.cs" />
124-
<Compile Include="Json\ErrorSerializer.cs" />
125124
<Compile Include="Json\GuidErrorIdProvider.cs" />
126125
<Compile Include="Json\IErrorIdProvider.cs" />
127-
<Compile Include="Json\IErrorSerializer.cs" />
128126
<Compile Include="Json\JsonApiFormatter.cs" />
129127
<Compile Include="Json\JsonHelpers.cs" />
130128
<Compile Include="Json\RelationAggregator.cs" />

JSONAPI/Json/ErrorSerializer.cs

Lines changed: 0 additions & 75 deletions
This file was deleted.

JSONAPI/Json/IErrorSerializer.cs

Lines changed: 0 additions & 12 deletions
This file was deleted.

JSONAPI/Payload/Builders/ErrorPayloadBuilder.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Net;
3+
using System.Web.Http;
34

45
namespace JSONAPI.Payload.Builders
56
{
@@ -19,6 +20,20 @@ public IErrorPayload BuildFromException(Exception exception)
1920
return new ErrorPayload(new [] { error }, topLevelMetadata);
2021
}
2122

23+
public IErrorPayload BuildFromHttpError(HttpError httpError, HttpStatusCode statusCode)
24+
{
25+
var error = new Error
26+
{
27+
Id = Guid.NewGuid().ToString(),
28+
Title = "The FallbackPayloadBuilderAttribute encountered an HttpError after the controller action completed.",
29+
Detail = httpError.Message,
30+
Status = statusCode
31+
};
32+
33+
var topLevelMetadata = GetTopLevelMetadata();
34+
return new ErrorPayload(new[] { (IError)error }, topLevelMetadata);
35+
}
36+
2237
/// <summary>
2338
/// Builds an error object for a given exception.
2439
/// </summary>

JSONAPI/Payload/Builders/IErrorPayloadBuilder.cs

Lines changed: 10 additions & 0 deletions

0 commit comments

Comments
 (0)