Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
using Google.Protobuf;
using Google.Protobuf.Reflection;
using Grpc.Core;
using Grpc.Gateway.Runtime;
using Grpc.Shared;
using Microsoft.AspNetCore.Grpc.JsonTranscoding.Internal.Json;
using Microsoft.AspNetCore.Http;
Expand Down Expand Up @@ -96,9 +95,8 @@ public static async ValueTask SendErrorResponse(HttpResponse response, Encoding
response.ContentType = MediaType.ReplaceEncoding("application/json", encoding);
}

var e = new Error
var e = new Google.Rpc.Status
{
Error_ = status.Detail,
Message = status.Detail,
Code = (int)status.StatusCode
};
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>HTTP API for gRPC ASP.NET Core</Description>
<PackageTags>gRPC RPC HTTP/2 REST</PackageTags>
Expand Down Expand Up @@ -27,11 +27,8 @@
<Compile Include="..\Shared\HttpRoutePatternParser.cs" Link="Internal\Shared\HttpRoutePatternParser.cs" />
<Compile Include="$(SharedSourceRoot)ValueTaskExtensions\**\*.cs" LinkBase="Internal\Shared" />

<Protobuf Include="Internal\Protos\errors.proto" Access="Internal" />

<Reference Include="Google.Api.CommonProtos" />
<Reference Include="Google.Protobuf" />
<Reference Include="Grpc.AspNetCore.Server" />
<Reference Include="Grpc.Tools" PrivateAssets="All" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ private static ApiDescription CreateApiDescription(RouteEndpoint routeEndpoint,
{
// Swagger uses this to group endpoints together.
// Group methods together using the service name.
["controller"] = methodDescriptor.Service.FullName
["controller"] = methodDescriptor.Service.Name
},
EndpointMetadata = routeEndpoint.Metadata.ToList()
};
Expand All @@ -77,6 +77,12 @@ private static ApiDescription CreateApiDescription(RouteEndpoint routeEndpoint,
ModelMetadata = new GrpcModelMetadata(ModelMetadataIdentity.ForType(methodDescriptor.OutputType.ClrType)),
StatusCode = 200
});
apiDescription.SupportedResponseTypes.Add(new ApiResponseType
{
ApiResponseFormats = { new ApiResponseFormat { MediaType = "application/json" } },
ModelMetadata = new GrpcModelMetadata(ModelMetadataIdentity.ForType(typeof(Google.Rpc.Status))),
IsDefaultResponse = true
});
var explorerSettings = routeEndpoint.Metadata.GetMetadata<ApiExplorerSettingsAttribute>();
if (explorerSettings != null)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Description>Swagger for gRPC ASP.NET Core</Description>
<PackageTags>gRPC RPC HTTP/2 REST Swagger OpenAPI</PackageTags>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ public async Task HandleCallAsync_MessageThenError_MessageThenErrorReturned()
var line2 = await ReadLineAsync(pipe.Reader).DefaultTimeout();
using var responseJson2 = JsonDocument.Parse(line2!);
Assert.Equal("Exception was thrown by handler.", responseJson2.RootElement.GetProperty("message").GetString());
Assert.Equal("Exception was thrown by handler.", responseJson2.RootElement.GetProperty("error").GetString());
Assert.Equal(2, responseJson2.RootElement.GetProperty("code").GetInt32());

await callTask.DefaultTimeout();
Expand Down Expand Up @@ -140,7 +139,6 @@ public async Task HandleCallAsync_ErrorWithDetailedErrors_DetailedErrorResponse(
var line = await ReadLineAsync(pipe.Reader).DefaultTimeout();
using var responseJson = JsonDocument.Parse(line!);
Assert.Equal("Exception was thrown by handler. Exception: Exception!", responseJson.RootElement.GetProperty("message").GetString());
Assert.Equal("Exception was thrown by handler. Exception: Exception!", responseJson.RootElement.GetProperty("error").GetString());
Assert.Equal(2, responseJson.RootElement.GetProperty("code").GetInt32());

await callTask.DefaultTimeout();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -445,7 +445,6 @@ public async Task HandleCallAsync_MalformedRequestBody_BadRequestReturned(string
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
using var responseJson = JsonDocument.Parse(httpContext.Response.Body);
Assert.Equal(expectedError, responseJson.RootElement.GetProperty("message").GetString());
Assert.Equal(expectedError, responseJson.RootElement.GetProperty("error").GetString());
Assert.Equal((int)StatusCode.InvalidArgument, responseJson.RootElement.GetProperty("code").GetInt32());
}

Expand Down Expand Up @@ -484,7 +483,6 @@ public async Task HandleCallAsync_MalformedRequestBody_RepeatedBody_BadRequestRe
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
using var responseJson = JsonDocument.Parse(httpContext.Response.Body);
Assert.Equal(expectedError, responseJson.RootElement.GetProperty("message").GetString());
Assert.Equal(expectedError, responseJson.RootElement.GetProperty("error").GetString());
Assert.Equal((int)StatusCode.InvalidArgument, responseJson.RootElement.GetProperty("code").GetInt32());
}

Expand Down Expand Up @@ -515,7 +513,6 @@ public async Task HandleCallAsync_BadContentType_BadRequestReturned(string conte
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
using var responseJson = JsonDocument.Parse(httpContext.Response.Body);
Assert.Equal(expectedError, responseJson.RootElement.GetProperty("message").GetString());
Assert.Equal(expectedError, responseJson.RootElement.GetProperty("error").GetString());
Assert.Equal((int)StatusCode.InvalidArgument, responseJson.RootElement.GetProperty("code").GetInt32());
}

Expand All @@ -540,7 +537,6 @@ public async Task HandleCallAsync_RpcExceptionReturned_StatusReturned()
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
using var responseJson = JsonDocument.Parse(httpContext.Response.Body);
Assert.Equal("Detail!", responseJson.RootElement.GetProperty("message").GetString());
Assert.Equal("Detail!", responseJson.RootElement.GetProperty("error").GetString());
Assert.Equal((int)StatusCode.Unauthenticated, responseJson.RootElement.GetProperty("code").GetInt32());
}

Expand All @@ -565,7 +561,6 @@ public async Task HandleCallAsync_RpcExceptionThrown_StatusReturned()
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
using var responseJson = JsonDocument.Parse(httpContext.Response.Body);
Assert.Equal("Detail!", responseJson.RootElement.GetProperty("message").GetString());
Assert.Equal("Detail!", responseJson.RootElement.GetProperty("error").GetString());
Assert.Equal((int)StatusCode.Unauthenticated, responseJson.RootElement.GetProperty("code").GetInt32());
}

Expand All @@ -591,7 +586,6 @@ public async Task HandleCallAsync_StatusSet_StatusReturned()
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
using var responseJson = JsonDocument.Parse(httpContext.Response.Body);
Assert.Equal(@"Detail!", responseJson.RootElement.GetProperty("message").GetString());
Assert.Equal(@"Detail!", responseJson.RootElement.GetProperty("error").GetString());
Assert.Equal((int)StatusCode.Unauthenticated, responseJson.RootElement.GetProperty("code").GetInt32());
}

Expand Down Expand Up @@ -1000,7 +994,6 @@ public async Task HandleCallAsync_ExceptionThrown_StatusReturned()
httpContext.Response.Body.Seek(0, SeekOrigin.Begin);
using var responseJson = JsonDocument.Parse(httpContext.Response.Body);
Assert.Equal("Exception was thrown by handler.", responseJson.RootElement.GetProperty("message").GetString());
Assert.Equal("Exception was thrown by handler.", responseJson.RootElement.GetProperty("error").GetString());
Assert.Equal((int)StatusCode.Unknown, responseJson.RootElement.GetProperty("code").GetInt32());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,9 @@ public void AddGrpcSwagger_GrpcServiceRegistered_ReturnSwaggerWithGrpcOperation(
Assert.Single(swagger.Paths);

var path = swagger.Paths["/v1/greeter/{name}"];
Assert.True(path.Operations.ContainsKey(OperationType.Get));
Assert.True(path.Operations.TryGetValue(OperationType.Get, out var operation));
Assert.Equal("Success", operation.Responses["200"].Description);
Assert.Equal("Error", operation.Responses["default"].Description);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void ServiceDescription_ModelHasXmlDocs_UseXmlDocs()
var swagger = GetOpenApiDocument<XmlDocServiceWithComments>();

// Assert
Assert.Equal("xmldoc.XmlDoc", swagger.Tags[0].Name);
Assert.Equal("XmlDoc", swagger.Tags[0].Name);
Assert.Equal("XmlDocServiceWithComments XML comment!", swagger.Tags[0].Description);
}

Expand All @@ -41,7 +41,7 @@ public void ServiceDescription_ModelDoesntHaveXmlDocs_UseProtoDocs()
var swagger = GetOpenApiDocument<XmlDocService>();

// Assert
Assert.Equal("xmldoc.XmlDoc", swagger.Tags[0].Name);
Assert.Equal("XmlDoc", swagger.Tags[0].Name);
Assert.Equal("XmlDoc!", swagger.Tags[0].Description);
}

Expand Down