Я, имеющих проблемы дизайна с asp.net веб-API, и хотел бы знать, как решить эту проблемукак разделить маркер между классами
public abstract class BaseApiController<TEntity> : ApiController where TEntity : Entity
{
protected string GetUsername()
{
return Utilities.GetUsername(Request.Headers.Authorization);
}
//some other code
}
public class StakeholderApiController : BaseApiController<Stakeholders>
{
ILogger _logger = new CustomApiLogger("StkhManager", GetUsername())
//some other code
}
теперь проблема у меня есть:
У меня есть BaseApiController, который я использую совместно с некоторыми функциями между всеми ApiControllers.
И вот у меня есть определенный ApiController для определенных не общих функций.
Теперь, когда я записываю журнал, я хочу зарегистрировать имя пользователя для входа в систему, проблема в том, что я должен передавать его каждый раз, когда я создаю новый экземпляр, есть ли способ сделать глобальное имя пользователя в журнале для глобального текущий запрос api, чтобы к нему можно было получить доступ повсюду.
Я не могу сделать его статическим, иначе для других просьба он даст неправильное имя пользователя.
есть способ, которым я могу избежать передачи его каждый раз. Учитывая, что webapi не имеет гражданства, поэтому нельзя использовать сеанс, есть ли другой способ?
Я использую angularjs переднего конца, поэтому я не использую любой метод авторизации предоставленного MVC/.net
Примечание:
Я не могу пошевелиться созданием Logger для базового класса по определенным причинам
Это всего лишь один пример, я хочу использовать имя пользователя вошедшего в систему во многих других местах. Следовательно, не хотите передавать его.
Вы пытались использовать 'Thread.CurrentPrincipal.Identity.Name'? – haim770
Я использую angularjs на стороне клиента, поэтому не устанавливал ничего, что было выпущено в CurrentPrincipal на данный момент. Но если бы вы могли поделиться кодом о том, как я могу его установить, было бы замечательно ... – harishr