如何获取路由数据值

时间:2013-02-14 21:58:25

标签: c# asp.net-mvc

我需要授权属性以确保经过身份验证的用户可以在安全区域中访问以管理他的数据。

我正在考虑检索httpContext.User.Identity.Name并将其与从数据库中检索到的用户名进行匹配。

这基本上是好的(安全的)方法吗?或者可以通过更好的安全感来完成它?

因此,我的控制器使用自定义属性

进行修饰
[UserAccountAuthorizeAttribute]
public ActionResult Edit(string username)
{
    return View();
}

并且我覆盖AuthorizeAttribute,但在调试模式下,后续行获取了空值

var rd = httpContext.Request.RequestContext.RouteData;
var username = rd.Values["username"]; // null

什么可能是问题?

1 个答案:

答案 0 :(得分:0)

您不应该将用户名放在查询字符串中。

如果您使用的是内置的ASP.NET成员资格提供程序,那么您的操作将如下所示。

    [Authorize]
    public ActionResult Edit()
    {
        var userId = (Guid)Membership.GetUser().ProviderUserKey;

        var someService = new MyService();
        var someData = someService.GetSomeDataByUserId(userId);
        //...
    }