如何不通过URL传递参数?

时间:2010-10-05 15:50:11

标签: asp.net-mvc-2 url-routing parameter-passing

首先抱歉我的英语不好,我是法国人。我会尽力让我明白:)

我想使用网址将参数从视图传递到控制器而不使用

参数是用户标识,我不希望有人在网址中手动更改。


我的代码在视图中:

  <% foreach (var item in ViewData["ClientsList"] as List<SalesCoverseal_V2.Models.Customer>)
           { %>
        <tr>
            <td>
                <%: Html.ActionLink("Editer", "ClientEdit", new { id=item.PersonId }) %>

          <%: Html.ActionLink("Faire une offre", "Index", new { controller
= "Offer", id=item.PersonId }) %>

在控制器中:

 public ActionResult Index(string id)
        {
            if (currentLoginUser != null)
            {                
                CurrentCustomer = WebService.GetClientInfos(id);
                SessionManager.CurrentCustomer = CurrentCustomer;

                OfferViewModel viewmodel = new OfferViewModel();

                return View(viewmodel);

            }


My url : 

> http://localhost:50905/Offer/Index/WS00000401

But I don't want this url, I want 

> http://localhost:50905/Offer/

你能帮帮我吗?谢谢

3 个答案:

答案 0 :(得分:3)

如果您不想传递网址中的ID,则必须“发布”请求,即提交表单。
您可以通过将id放在隐藏字段中来完成此操作。您应该意识到这本身并不是防篡改 如果您想确保您的用户ID没有被篡改,那么您将不得不在将其发送到客户端之前对其进行加密,然后在返回时对其进行解密,以便您可以检查它是否已被更改以任何方式。 此外,您可以将Action方法标记为仅接受Post请求,以防止任何人尝试使用Get请求访问它。

答案 1 :(得分:1)

如果这是当前用户的身份的一部分,某种cookie似乎是正常的方法,但是除非你的内容要么是加密签名的值,要么是不透明的不可预测的查找(Guid),否则cookie很容易被欺骗一些价值。在任何一种情况下,您都希望使其有时间限制以防止重播。

如果您只是不想要URL上的数据,POST可能会有所帮助,但您无法重定向到POST。

答案 2 :(得分:1)

使用POST代替GET并不能帮助解决问题,因为任何人都可以像使用GET一样轻松伪造POST。

如果用户有权查看数据,我建议您检查服务器端。

你想要做的是什么?您可以使用HMAC

HTHS,
查尔斯