如何隐藏URL中的参数/查询字符串?

时间:2018-03-30 06:54:36

标签: c# asp.net routes asp.net-core-2.0

我正在尝试从URL中删除参数以使用户友好的URL并优化搜索引擎优化的URL。

我在startup.cs中编写了以下代码

 routes.MapRoute(
                    name: "edit-project-route",
                    template: "manage-your-project/{id?}",
                    defaults: new { controller = "Manager", action = "EditProject" 
});

编辑按钮位于详细页面中,如下所示:

enter image description here

以下是上页代码:

        @foreach (var item in Model)
        {
            count = count + 1;
            <tr>
                <td scope="row">@count</td>
                <td>@Html.DisplayFor(modelItem => item.Name)</td>
                <td>@Html.DisplayFor(modelItem => item.Technology)</td>
                <td>                    
                    <a href="/manage-your-project/@item.ProjectId" class="btn btn-sm btn-primary">Edit</a>
                    <a href="@Url.Action("DeleteProject",new { id=item.ProjectId})" class="btn btn-sm btn-danger">Delete</a>
                </td>
            </tr>
        }

每当我点击编辑按钮,下面的页面就会显示在浏览器中。

enter image description here

我想从查询字符串中删除突出显示的ID。有没有办法通过不影响功能来实现这一目标。

1 个答案:

答案 0 :(得分:1)

如果您想要删除ID,您需要自己查找更详细地验证功能的方法。我们有时会使用博客文章或其他方式执行此操作。一个例子可能是这样的路由配置。

routes.MapRoute(
     "Manage-Account",
     "manage/{projectName}",
      new {action = "EditProject", controller="Manager"}
  );

然后,您可以使用类似

的代码方法
public IActionResult EditProject(string projectName){
    //TODO: Lookup the project, using the name, and display result
}

然后您可以获取

等网址

/管理/我的项目 要么 /管理/其他项目-名称

您可以通过此方式获得更高级的功能,以便从此示例中删除/ manage / part,但通常您还需要了解其他后果。

编辑:根据评论,您的愿望是提高安全性,此解决方案无法解决此问题。如果用户只对特定值(示例id 1,但不是5)具有编辑权限,则您希望在GET和POST操作上对此进行验证以进行编辑,以确保用户不操作URL,这将使用友好URL结构或其他。