【问题标题】:Url Routing with queries带有查询的 URL 路由
【发布时间】:2012-09-11 12:11:54
【问题描述】:

参考This questionScottGu's Documentation,我已经成功地为我的网站的会员资料页面路由了一个网址。

我的页面将~/page/MemberName 重定向到~/page/Default.aspx,用户使用MemberName 请求信息。
到目前为止,这一直运行良好。

我现在需要一种方法来允许用户编辑他们的数据,并希望像~/page/MemberName/Private 一样访问它。 Private 标签会告诉页面用户可以编辑他们的内容。

【问题讨论】:

  • 你不能设置用户角色并提供编辑权限吗?
  • 如果你使用 MVC,你可以设置你的控制动作或分类 DataAnnotation 属性 [Authorize] 阅读 this linkMembership and Authorization
  • 我正在使用我自己的基于 SQL 的授权,并将使用它来引用我页面上的数据。

标签: c# asp.net url-routing


【解决方案1】:

虽然我会考虑按照@huMpty duMpty 的建议并为此使用角色。

您只需要设置路由以在 URL 中包含额外信息。

routes.MapPageRoute("SalesRoute",
    "page/{MemberName}/{ExtraData}",
    "~/Default.aspx");

然后像访问 MemberName 一样访问它:

Page.RouteData.Values["ExtraData"];

如果您想确保 'Private' 被传入,您可以通过其中一个重载向路由添加约束。

routes.MapPageRoute("SalesRoute",
    "page/{MemberName}/{ExtraData}",
    "~/Default.aspx",
    false,
    new RouteValueDictionary(),
    new RouteValueDictionary{
       { "ExtraData", "[P|p]rivate" }
    });

值得注意的是,您可能希望对此进行很好的测试,因为您最终可能会得到过于严格的路由规则。

【讨论】:

  • 我已将路由更改为routes.MapPageRoute("","Page/{address}/{data}","~/Page/Default.aspx");,并添加了string extraData = Page.RouteData.Values["data"].ToString();。现在,每当我想转到 /User/ 时,我都会得到一个 Object reference not set to an instance of an object.,而当我尝试转到 /User/Private 时,我会得到一个 The resource cannot be found.
猜你喜欢
  • 2014-03-05
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
相关资源
最近更新 更多