【问题标题】:How NOT to pass a parameter by URL?如何不通过 URL 传递参数?
【发布时间】:2010-10-05 15:50:10
【问题描述】:

首先对不起我的英语不好,我是法国人。我会尽量让我明白:)

我想将参数从视图传递到控制器不使用使用 url。

参数是一个用户标识,我不希望有人在 url 中手动更改它。


我的代码在视图中:

  <% 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/

你能帮帮我吗?谢谢你

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我想过,但是当我使用FormMethod.Post时,我的参数没有在我的控制器中传入[HttpPost]。
    • 当您使用 FormMethod.Post 时,您的所有表单值都在表单集合中的请求中传递(而不是将 url 作为查询字符串)。然后使用服务器模型绑定将这些值映射到您的操作参数。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      您到底想做什么?您可以使用HMAC

      HTH,
      查尔斯

      【讨论】:

        猜你喜欢
        • 2014-05-22
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2011-07-29
        • 2011-12-25
        • 1970-01-01
        相关资源
        最近更新 更多