我正在尝试从URL中删除参数以使用户友好的URL并优化搜索引擎优化的URL。
我在startup.cs中编写了以下代码
routes.MapRoute(
name: "edit-project-route",
template: "manage-your-project/{id?}",
defaults: new { controller = "Manager", action = "EditProject"
});
编辑按钮位于详细页面中,如下所示:
以下是上页代码:
@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>
}
每当我点击编辑按钮,下面的页面就会显示在浏览器中。
我想从查询字符串中删除突出显示的ID。有没有办法通过不影响功能来实现这一目标。
答案 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结构或其他。