使用GET将当前用户作为参数传递给外部URL

时间:2015-10-13 14:56:05

标签: c# html asp.net-mvc get asp.net-mvc-5

我正在使用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 ;
    }
};

这确实有效,它解决了我的问题,但看起来很难看。我是网络编程的新手,我认为必须有更好/更漂亮的方式来做这件事。怎么样?

1 个答案:

答案 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);
}