首先抱歉我的英语不好,我是法国人。我会尽力让我明白:)
我想使用网址将参数从视图传递到控制器而不使用。
参数是用户标识,我不希望有人在网址中手动更改。
我的代码在视图中:
<% 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/
答案 0 :(得分:3)
如果您不想传递网址中的ID,则必须“发布”请求,即提交表单。
您可以通过将id放在隐藏字段中来完成此操作。您应该意识到这本身并不是防篡改
如果您想确保您的用户ID没有被篡改,那么您将不得不在将其发送到客户端之前对其进行加密,然后在返回时对其进行解密,以便您可以检查它是否已被更改以任何方式。
此外,您可以将Action方法标记为仅接受Post请求,以防止任何人尝试使用Get请求访问它。
答案 1 :(得分:1)
如果这是当前用户的身份的一部分,某种cookie似乎是正常的方法,但是除非你的内容要么是加密签名的值,要么是不透明的不可预测的查找(Guid),否则cookie很容易被欺骗一些价值。在任何一种情况下,您都希望使其有时间限制以防止重播。
如果您只是不想要URL上的数据,POST可能会有所帮助,但您无法重定向到POST。
答案 2 :(得分:1)