我有一个简单的自定义属性AuthorizedUser
,它被附加到一个gRPC方法,如下所示:
[AuthorizedUser]
public override Task<ServerStatusReply> ServerStatus(ServerStatusRequest request, ServerCallContext context)
{
// ...
// some logic to create a response object, irrelevant for the question
// ...
return Task.FromResult(response);
}
然后,我为一元调用创建了一个拦截器,它拦截了这个方法:
public override async Task<TResponse> UnaryServerHandler<TRequest, TResponse>(
TRequest request,
ServerCallContext context,
UnaryServerMethod<TRequest, TResponse> continuation)
{
// ??? - how do I get my custom attribute of the method?
try
{
return await continuation(request, context);
}
catch (Exception ex)
{
// Note: The gRPC framework also logs exceptions thrown by handlers to .NET Core logging.
_logger.LogError(ex, $"Error thrown by {context.Method}.");
throw;
}
}
所有的工作都很完美,但这里有一个问题--我如何知道哪个方法被拦截了,以及它附加了什么属性?
在request
、context
和continuation
对象中,我能找到的最好的方法是方法的proto名称,而不是具有正确名称空间的实际C#方法ID。
我想知道该方法能够获得附加到该方法的所有属性的列表,以执行额外的自定义逻辑。
1条答案
按热度按时间ajsxfq5m1#
可以从端点元数据中获取属性