Asp.net mvc ActionLink中的用户ID

Asp.net mvc ActionLink中的用户ID,asp.net-mvc,visual-studio-2013,actionlink,Asp.net Mvc,Visual Studio 2013,Actionlink,我正在开发一个应用程序,在用户登录后,我想将他们重定向到一个页面,在那里他们可以更新他们的配置文件,为此,我想使用登录用户的ID检索他们的详细信息 由于我正试图这样使用他们的ID,我不知道最好的方法是否仍然是在URL或actionLink中显示ID,我的编辑ActionResult是: // GET: ProfileFormViewModel/Edit/5 public ActionResult Edit(int id) { //My code to load t

我正在开发一个应用程序,在用户登录后,我想将他们重定向到一个页面,在那里他们可以更新他们的配置文件,为此,我想使用登录用户的ID检索他们的详细信息

由于我正试图这样使用他们的ID,我不知道最好的方法是否仍然是在URL或actionLink中显示ID,我的编辑ActionResult是:

// GET: ProfileFormViewModel/Edit/5
    public ActionResult Edit(int id)
    {
        //My code to load the user details

        return View(profileFormViewModel);
    }
这是否意味着,如果用户更改URL,他们将获得其他用户的详细信息

由于我正在尝试从登录用户检索用户ID,我是否需要在ActionResult方法中接收int参数,我是否可以将其保留为:

// GET: ProfileFormViewModel/Edit/5
    public ActionResult Edit()
    {
        //get logged in user

        return View(profileFormViewModel);
    }
    public ActionResult Edit(ProfileFormViewModel profileFormViewModel)
    {
        try
        {
            if (ModelState.IsValid) 
            {
                 //Go save it
            }


            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }
我的路由配置如下所示,因此如果我没有在ActionResult链接中发送int ID,它将给我一个错误

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
这是否意味着,如果用户更改URL,他们将获得 其他用户的详细信息

答案是肯定的。如果您不希望发生这种情况,可以这样做:

使用当前登录的用户id检查输入id。 如果他们匹配,向他展示他的个人资料,让他根据自己的意愿进行任何更改。 如果他们不匹配,这意味着他试图查看另一个个人资料。你可以返回一个错误代码,或者直接将他重定向到另一个页面。 然而,从我的观点来看,当一个用户试图通过更改URL中的id来查看另一个用户的个人资料时,只需让他查看即可。他所能做的就是阅读,不允许编辑

我甚至需要在ActionResult方法中接收int参数吗

是的,你应该。但要说清楚,正如我所说:让他看看其他配置文件,你应该将其分为两种方法:

public ActionResult ViewProfile(int id)
{
    // This method allows user to view his or another user's profile
}

public ActionResult Edit()
{
    // This method is called when user clicks Edit in his profile.
    // It returns a View for editing (data in some controls like textboxes, dropdownlist,...)
}

您不应接受用户id作为参数。。它也不应该出现在ProfileFormViewModel上。。。您还应该使用某种[Authorize]属性装饰编辑操作。。。始终从用户管理器中检索用户ID。在允许管理员或超级用户编辑用户配置文件方面,该规则有例外。如果是这种情况,您可能应该编写某种自定义授权属性或操作筛选器,并接受要编辑的ID作为参数。您的第二次尝试应该不会有问题,因为ID是可选参数。好吧,根据您的说法,我应该使用第二种方法,对吗?或者我应该将输入参数设置为可选的,比如:然后从用户管理器中检索用户id?谢谢