Asp.net mvc 将URL参数从控制器隐藏到视图:MVC 5

Asp.net mvc 将URL参数从控制器隐藏到视图:MVC 5,asp.net-mvc,asp.net-mvc-5,Asp.net Mvc,Asp.net Mvc 5,假设我有一个网站,有各种各样的不同页面,每个页面都是为某个用户定制的,并且只有该用户才能访问。当用户访问一个页面时,该页面的URL将是UserStuff/Pages/11,其中11是页面的ID。现在,因为用户可以有多个页面,所以我使用ActionLink元素将用户指向其所选页面,如下所示: // In Index.cshtml // ... @Html.ActionLink("View Page", "Pages", new { id = page.ID }, new { @class=...}

假设我有一个网站,有各种各样的不同页面,每个页面都是为某个用户定制的,并且只有该用户才能访问。当用户访问一个页面时,该页面的URL将是UserStuff/Pages/11,其中11是页面的ID。现在,因为用户可以有多个页面,所以我使用ActionLink元素将用户指向其所选页面,如下所示:

// In Index.cshtml
// ...
@Html.ActionLink("View Page", "Pages", new { id = page.ID }, new { @class=...})
控制器截取给定的id:

public ActionResult Pages(int id) 
{
    // ...
    Page page = db.Pages.Find(id);
    return View(page);
}
这工作得很好,并准确地提供了我希望应用程序的行为方式。但是,我希望将ID隐藏在URL中。如何通过参数将信息从视图传递到控制器,而不将其暴露在URL中?假设我不希望页面的ID在URL中可见,我如何链接到使用给定参数的其他操作


我认为将请求保持为GET请求很重要,因为其他操作会重定向到结果页面。将其包装在form/POST请求中会使上述操作无法访问信息,而不必经过与原始用户相同的过程,这不是我在此实现中想要的。

您不能“隐藏”url,并且在任何情况下,用户都可以在地址栏中键入他们想要的内容。如果不将值传递给控制器,则控制器将永远无法获取该值。如果您不希望用户访问具有特定ID的资源,请在ControllerSuite中执行检查,用户始终可以在URL中键入他们想要的任何内容,并且my Action方法执行身份验证以防止查看其他人的页面。也就是说,我只是想知道我是否可以完全出于显示的目的切断URL的/{id}部分。如果您想将id传递给控制器,那么URL必须包含IDID的值才有意义。如果在这个特定的示例中使用POST请求而不是GET请求,那么如果我只想检索信息,这会被认为是错误的做法吗?POST方法用于更改数据,因此它应该是GET,但是在url中显示ID有什么问题?