在ASP.NET Core 2.1 Razor Pages中,如何搭建模型并避免使用ID字段?
替换脚手架生成的Edit页面数字ID为自定义哈希字符串URL
没问题,我帮你梳理下怎么把脚手架生成的Edit页面URL里的数字ID替换成你自定义的12位加盐哈希字符串,完全满足你隐藏连续编号的需求:
1. 调整路由规则
首先要修改项目的路由配置,让系统能识别带哈希字符串的URL。假设你用的是ASP.NET MVC(脚手架常用框架),在Program.cs(或者旧版本的Startup.cs)里添加自定义路由,要放在默认路由之前:
// 自定义Student编辑路由,匹配Student/Edit/xxx格式的哈希ID app.MapControllerRoute( name: "StudentEdit", pattern: "Student/Edit/{hashId}", defaults: new { controller = "Student", action = "Edit" } ); // 保留原来的默认路由 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}" );
2. 修改Edit Action方法
原来的Edit方法是接收int类型的id,现在要改成接收string类型的hashId,然后通过这个哈希值去数据库查询对应的记录:
public IActionResult Edit(string hashId) { if (string.IsNullOrEmpty(hashId)) { return BadRequest(); } // 根据你存储的哈希字段查询对应的学生记录 var student = _context.Students.FirstOrDefault(s => s.YourHashFieldName == hashId); if (student == null) { return NotFound(); } // 后续的编辑逻辑和原来保持一致,比如返回编辑视图 return View(student); }
注意:把YourHashFieldName换成你数据库里存储12位哈希字符串的字段名
3. 更新页面上的Edit链接
不管是在列表视图还是其他地方生成的Edit链接,都要把原来的数字ID换成哈希字符串:
- 如果是Tag Helper写法:
<!-- 原来的写法 --> <a asp-action="Edit" asp-route-id="@item.Id">编辑</a> <!-- 修改后的写法 --> <a asp-action="Edit" asp-controller="Student" asp-route-hashId="@item.YourHashFieldName">编辑</a>
- 如果是HtmlHelper写法:
<!-- 原来的写法 --> @Html.ActionLink("编辑", "Edit", "Students", new { id = item.Id }, null) <!-- 修改后的写法 --> @Html.ActionLink("编辑", "Edit", "Student", new { hashId = item.YourHashFieldName }, null)
4. 关键注意事项
- 确保你的哈希字段在数据库中是唯一约束的,避免多个记录对应同一个哈希值导致查询混乱
- 不需要改动原来的int类型主键,后台依然可以通过哈希值找到对应的主键进行后续操作
- 因为你只是想隐藏连续编号,不需要额外的加密校验逻辑,只要保证哈希值和记录的映射关系准确即可
内容的提问来源于stack exchange,提问作者user1489765
相关产品推荐
相关产品推荐

