Вы можете использовать связующее для пользовательской модели ...
Я не могу вспомнить, почему я использовал этот метод вместо метода базового контроллера, о котором упоминает @jfar (что также является хорошим вариантом), но он хорошо работает для меня, и мне на самом деле это нравится, потому что мои действия более самоописываются через их параметры.
MyCustomIdentityModelBinder.cs
public class MyCustomIdentityModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext.Model != null)
throw new InvalidOperationException("Cannot update instances");
//If the user isn't logged in, return null
if (!controllerContext.HttpContext.User.Identity.IsAuthenticated)
return null;
return controllerContext.HttpContext.User as MyCustomIdentity;
}
}
Внутри вашего события запуска приложения в Global.asax.cs
System.Web.Mvc.ModelBinders.Binders.Add(typeof(MyCustomIdentity), new MyCustomIdentityModelBinder());
Тогда, когда у вас есть тип MyCustomIdentity
в качестве параметра действия, он автоматически будет использовать MyCustomIdentityModelBinder
.
Например.
public class TestController : Controller
{
public ActionResult Index(MyCustomIdentity identity)
{
int userID = identity.UserID;
...etc...
}
}
HTHS
Charles