Asp.net mvc 3 在asp.net mvc中隐藏url路由参数

Asp.net mvc 3 在asp.net mvc中隐藏url路由参数,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc 3,Asp.net Mvc Routing,是否有一种方法专门向用户隐藏ASP.NET MVC中的路由参数。具体来说,我想要一个链接 =2 变成 但是在内部将标题ID传递给我的控制器 你能做到吗 谢谢 更新:是的,我的网页上有一些按钮,比如他们的href,但我宁愿隐藏所有参数,这样用户就不会通过尝试不同的参数直接进入页面的其他部分@Moshe,不,这不是来自submit或post的,否则我会使用强类型视图。谢谢只要您的参数在客户机上,它们就永远不会被“隐藏”,除非您对它们进行加密。您可以将参数存储在一个隐藏字段中,并将操作方法设置为po

是否有一种方法专门向用户隐藏ASP.NET MVC中的路由参数。具体来说,我想要一个链接

=2 变成

但是在内部将标题ID传递给我的控制器

你能做到吗

谢谢


更新:是的,我的网页上有一些按钮,比如他们的href,但我宁愿隐藏所有参数,这样用户就不会通过尝试不同的参数直接进入页面的其他部分@Moshe,不,这不是来自submit或post的,否则我会使用强类型视图。谢谢

只要您的参数在客户机上,它们就永远不会被“隐藏”,除非您对它们进行加密。您可以将参数存储在一个隐藏字段中,并将操作方法设置为post,然后该值在URL中不可见。但对web稍有了解的用户仍然可以操作隐藏字段(除非您以某种方式对值进行加密)


编辑:如果必须保存,则必须在服务器上检查用户的凭据。否则,您可以像在其他示例中一样隐藏数据,或者可以使用加密,例如使用ProtectData.Protect(…)

对于必须来回传递到视图的简单数值,您可以在控制器中编写两个私有方法:

private int Obscure(int source) {
    return (source*source) * 3; //or something clever you come up with
}

private int DeObscure(int obscuredValue) {
    return (int)Math.Sqrt(obscuredValue / 3); //inverse the Obscure method
}
您可以在将值传递给视图之前使用这些值来隐藏这些值,并在将其发回后取消隐藏这些值。请注意,这并不是实现安全性的好方法,如中所述


另一个选择是创建一个模糊的/DeObscure过程,该过程接收整个查询字符串,并以某种方式来回破坏它。不过,这需要编写一个自定义的ViewEngine。听起来很有趣…

用户是否会在某一点上请求此页面?我将添加到Emmanuel的评论中-是否使用表单提交调用“Do”操作?具体使用POST方法?你能解释一下“隐藏”吗?你是不想在URL中,还是根本不想通过网络传输?@Aaron,我不想让用户看到URL中的参数,但它需要传输到我的控制器。因此,对用户隐藏参数一个选项是以某种方式对查询字符串进行编码/解码,但是,我是否正确理解您想要的是一个外观整洁的URL?在这种情况下,可以选择传输请求并异步更新页面。OK。我将看看如何加密这些值。你知道我如何加密这些值吗?如果你只是想让爱管闲事的用户远离你,你可以对你的数据进行编码(或隐藏)。但这并不十分安全,因为很容易猜到。加密的一种简单方法是ProtectedData.Protect(..),但必须在同一台机器上解密这些值(不适用于农场)。