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

时间:2012-01-19 15:25:58

标签: asp.net-mvc-3 asp.net-mvc-routing

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

http://sitename.com/Do?title = 2 简单地成为 http://sitename.com/Do

但在内部将titleId传递给我的控制器。

那可以吗?

由于

更新:是的,我的网页上有一些按钮,当前有href,但我宁愿隐藏所有参数,这样用户就不会通过尝试不同的参数直接进入页面的其他部分。 @Moshe,不是它不是来自提交或发布其他我使用强类型视图。感谢

2 个答案:

答案 0 :(得分:2)

只要您的参数在客户端上,除非您加密它们,否则它们永远不会被“隐藏”。您可以将参数存储在隐藏字段中并将操作方法​​设置为发布,然后该值在URL中不可见。但是,对网络有一点了解的用户仍然可以操纵隐藏字段(除非您以某种方式加密值)。

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

答案 1 :(得分:0)

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

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
}

您可以在将值传递给视图之前使用这些值来隐藏值,并在将它们发回后对其进行去模糊处理。请注意,这不是实现安全性的好方法,如this stackoverflow post中所述。

另一种选择是创建一个Obscure / DeObscure过程,该过程接收整个查询字符串并以某种方式来回扭曲。这需要编写自定义ViewEngine。听起来很有意思......