Я пишу клиентскую библиотеку для API, который предоставляет как открытые, так и аутентифицированные конечные точки. Я хотел бы легко указать, какие конечные точки требуют аутентификации, используя атрибуты. Например:
public async Task<ApiResponse> GetPublicData()
{
var request = CreateRequest( "v1/public" );
return await _httpClient.GetAsync( request );
}
[RequiresAuthentication]
public async Task<ApiResponse> GetPrivateData()
{
var request = CreateRequest( "v1/private" );
return await _httpClient.GetAsync( request );
}
private ApiRequest CreateRequest( string endpoint )
{
var request = new ApiRequest( endpoint );
// if (caller has RequiresAuthenticationAttribute)
// SignRequest( request, _credentials );
return request;
}
Насколько мне известно, единственный способ получить доступ к тому, имеет ли CreateRequest
вызывающий объект RequiresAuthenticationAttribute
, - это создать кадр стека, найти метод с помощью отражения и затем попытаться получить атрибут от MethodInfo
. Это может быть невероятно медленно.
Есть ли другой способ передать эту информацию вызываемому абоненту, который не приведет к снижению производительности. Я знаю, что запросы всегда будут ограничены временем отклика API, но с учетом того, что это связано с финансовыми данными, необходимость выполнять запросы как можно скорее является обязательной, и возможность делать это в чистый способ, который включает атрибуты вместо ручной передачи параметров, был бы очень хорош.