我正在使用ASP.NET,MVC 5和Identity 2.0构建应用程序。
当用户点击导航栏中的其中一个按钮时,我会捕获当前用户及其安全标记,并使用GET将它们作为参数传递给外部网址。就像这样:
class ovrldng {
public:
int var;
ovrldng() {
var=101;
cout << "Default constructor assigned value into var=" << var ;
}
ovrldng(int x) {
var=x;
cout << "Parametrized assign 'x' value to var =" << var ;
}
};
这确实有效,它解决了我的问题,但看起来很难看。我是网络编程的新手,我认为必须有更好/更漂亮的方式来做这件事。怎么样?
答案 0 :(得分:0)
您可以实现自己的ActionFilterAttribute来“注入”包含您需要的所有用户属性的对象。
您的UserViewModel将是:
public class UserViewModel
{
public string UserName {get; set;}
public string SecurityStamp {get; set;}
}
过滤器实现:
public class LoggedUserParameterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
// Get the User (you have to adjust your code here)
var user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(User.Identity.GetUserId());
// 'Assemble' your logged user with all the needed information
var userViewModel = UserViewModel {
UserName = user.UserName,
SecurityStamp = user.SecurityStamp
}
// Create an optional action parameter 'loggedUser'
filterContext.ActionParameters["loggedUser"] = userViewModel;
}
}
最后你可以在任何动作方法中“注入”loggedUser参数,如下所示:
[LoggedUserParameter]
public ActionResult ExternalUrl(UserViewModel loggedUser)
{
return Redirect("http://externalurl/access.asp?" + "userName=" + loggedUser.UserName + "&par1=" + loggedUser.SecurityStamp);
}