Вы можете изменить базовый тип страницы Razor на свой собственный, например:
public class UserAwareViewPage : System.Web.Mvc.WebViewPage
{
public IPrincipal User { get { return Thread.CurrentPrincipal; } }
}
А затем измените ваш конфигурационный файл следующим образом:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,
System.Web.Mvc, Version=3.0.0.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="Your.Namespace.UserAwareViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
У Фила Хаака очень хорошая запись в блоге по этому вопросу здесь .
Кроме того, вы можете добавить метод расширения к System.Web.Mvc.WebViewPage
(базовый тип для бритвенных страниц) и использовать его.
public static IPrincipal User(this System.Web.Mvc.WebViewPage page)
{
return Thread.CurrentPrincipal;
}
Что бы можно было использовать так:
@if(Request.IsAuthenticated) {
<text>Signed In As <strong>@User().Identity.Name</strong>
Лично я предпочитаю первый подход, но подумал, что предоставлю второй для альтернативного варианта.