2015-07-30 4 views
2

Для ASP.NET 5 beta 6 при создании контроллера кажется, что вы больше не расширяете Controller (Microsoft.AspNet.Mvc.Controller). Итак, как мне получить доступ к текущему пользователю? Раньше я просто использовал свойство «Пользователь» у контроллера, чтобы получить System.Security.Claims.ClaimsPrincipal для пользователя, связанного с исполняемым действием. Без контроллера теперь «Пользователь» больше не определен.Получить текущего пользователя в контроллере ASP.NET 5 beta 6

Работает в Beta 5:

[Authorize] 
[Route("[controller]")] 
public class UserDetailsController : Controller 
{ 
    [HttpGet] 
    public JsonResult Get() 
    { 
     var user = User as ClaimsPrincipal; 
     var claims = from c in user.Claims 
        select new 
        { 
         type = c.Type, 
         value = c.Value 
        }; 

     return new JsonResult(claims); 
    } 
} 

не работает в Beta 6:

[Authorize] 
[Route("[controller]")] 
public class UserDetailsController 
{ 
    [HttpGet] 
    public JsonResult Get() 
    { 
     var user = User as ClaimsPrincipal; // ERROR - The name 'User' does not exist in the current context 
     var claims = from c in user.Claims 
        select new 
        { 
         type = c.Type, 
         value = c.Value 
        }; 

     return new JsonResult(claims); 
    } 
} 

ответ

2

Так что я потратил больше, чем я хочу признать, сегодня на поиск ответа на то, как я могу получить доступ к текущему пользователю, используя новые контроллеры стиля POCO, и, конечно же, вскоре после того, как я разместил вопрос, я наткнулся на ответ, читая через ASP.NET announcements repo. Надеюсь, это поможет кому-то еще.

стилизованный контроллер ПОКО должен быть:

[Authorize] 
[Route("[controller]")] 
public class UserDetailsController 
{ 
    [ActionContext] 
    public ActionContext ActionContext { get; set; } 

    public HttpContext HttpContext => ActionContext.HttpContext; 

    [HttpGet] 
    public JsonResult Get() 
    { 
     var user = HttpContext.User; 
     var claims = from c in user.Claims 
        select new 
        { 
         type = c.Type, 
         value = c.Value 
        }; 

     return new JsonResult(claims); 
    } 
} 
+2

Вы можете даже добавить 'public ClaimsPrincipal User => HttpContext? .User;' для удобства. –

1

В beta6 Controller базовом классе больше не поставляется с Microsoft.AspNet.Mvc.Core пакетом, но с Microsoft.AspNet.Mvc.ViewFeatures пакетом.

Так что добавление ссылки на Microsoft.AspNet.Mvc.ViewFeatures исправит вашу проблему. Класс Controller по-прежнему живет в пространстве имен Microsoft.AspNet.Mvc.

Также см. Это объявление: Refactoring of MVC packages.

Смежные вопросы