2

Для упрощения в webapi-контроллере asp.net хорошо использовать объект Principal (аутентифицированный пользовательский объект) в качестве свойства или переменной, которые должны быть установлены в конструкторе контроллера. но User имеет значение null в конструкторе. как я могу получить текущего пользователя в конструкторе контроллера?Как получить главного пользователя в конструкторе webapi?

public class MyController : ApiController 
{ 
    string userId; 
    public MyController() 
    { 
     userId = User.Identity.GetUserId(); 
    } 

    public IEnumerable<string> Get() 
    { 
     var userName = GetUserNameById(userId); 
     return new string[] { userName }; 
    } 
} 
+1

Вы добавили какую-то аутентификацию, будучи основным, OAuth, интеграцией Windows и т. Д. – Michael

+0

Вы не можете. в тот момент в конвейере пользователь не был реализован в запросе. на основе того, какой поток аутентификации вы используете, вы можете назначить пользователя через actionfilter – Nkosi

ответ

0

Пользователь назначается хорошо после того, как контроллер был создан. Вы не сможете получить доступ к нему в конструкторе. Вместо этого вы должны получить идентификатор пользователя непосредственно в своих действиях после того, как запрос и связанный пользователь были назначены контроллеру.

public class MyController : ApiController 
{ 

    private string GetUserId() { 
     return User.Identity.GetUserId(); 
    } 

    public IEnumerable<string> Get() 
    { 
     var userName = GetUserNameById(GetUserId()); 
     return new string[] { userName }; 
    } 
} 
Смежные вопросы