Я работаю над приложением ASP.NET MVC. Я реализовал пользовательское членство провайдера, принципала и личность. В пользовательском поставщике я заменяю HttpContext.Current.User в методе ValidateUser () следующим образом:
public sealed class CustomMembershipProvider : MembershipProvider {
...
public override bool ValidateUser(string username, string password) {
...
CustomIdentity identity = new CustomIdentity(...);
CustomPrincipal cu = new CustomPrincipal(identity);
HttpContext.Current.User = cu;
...
}
...
}
В AccountController (вызывает провайдера пользовательского членства) я могу получить доступ к пользовательскому идентификатору следующим образом:
public class AccountController : BaseController {
...
public ActionResult LogOn(string userName,
string password,
bool rememberMe,
string returnUrl) {
...
CustomIdentity ci = (CustomIdentity)HttpContext.User.Identity;
...
}
...
}
Все мои контроллеры наследуют BaseController, который вызывает пользовательский атрибут следующим образом:
[CustomAttribute]
public abstract class BaseController : Controller {
...
}
Я хочу, чтобы другие мои контроллеры имели доступ к пользовательской идентификации в пользовательском атрибуте после того, как он был установлен AccountController, следующим образом:
public class CustomAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext filterContext) {
base.OnActionExecuting(filterContext);
CustomIdentity ci = filterContext.HttpContext.User.Identity as CustomIdentity;
...
}
}
}
Я обнаружил, что filterContext.HttpContext.User по-прежнему имеет значение GenericPrincipal, а не мой CustomPrincipal. Так что моя личность не доступна в моём фильтре атрибутов. Что мне нужно сделать, чтобы мой CustomPrincipal был доступен в моем фильтре атрибутов?
Заранее спасибо.