.NET Core 6如何创建包含连字符的动态路由
.NET Core 6 实现带连字符的动态岗位路由方案
.NET Core 6 原生支持路由段内固定文本与参数拼接,不需要额外引入第三方库、也不需要手动拆分URL字符串,按以下步骤配置即可。
一、后端路由配置
根据你用的项目类型选对应配置即可:
MVC 项目配置
在Program.cs中添加对应路由规则,直接把固定前缀hiring-和路由参数position写在同一段模板里:var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); var app = builder.Build(); // 其他中间件配置... app.UseStaticFiles(); app.UseRouting(); // 招聘岗位动态路由,放在默认路由之前 app.MapControllerRoute( name: "hiring_position", pattern: "career/hiring-{position}", defaults: new { controller = "Career", action = "PositionDetail" } ); // 默认路由配置 app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();对应控制器接收参数即可,框架会自动把
hiring-后面的内容绑定到position参数:public class CareerController : Controller { public IActionResult PositionDetail(string position) { // 岗位白名单校验,非法值直接返回404 string[] validPositions = { "react", ".net", "flutter" }; if (!validPositions.Contains(position.ToLower())) return NotFound(); // 传递岗位数据到视图渲染 return View(model: position); } }Razor Pages 项目配置
不需要在Program.cs额外写路由规则,直接在岗位详情页的@page指令中声明路由模板即可:@page "/career/hiring-{position}" @model YourApp.Pages.Career.PositionDetailModel对应PageModel中直接绑定参数:
public class PositionDetailModel : PageModel { public void OnGet(string position) { // 同MVC的参数校验、数据查询逻辑 } }
注意:不要把整个
hiring-xxx作为一个路由参数再做字符串拆分,这种写法冗余且容易出错,框架自带的段内文本拼接能力完全可以满足需求,连字符、点号这类特殊字符在非文件路径段中不需要额外转义。
二、前端点击切换URL逻辑
点击岗位选项时直接拼接目标路径即可,根据你的需求选择整页跳转或者SPA无刷新跳转:
<!-- 岗位选项示例 --> <div class="position-tabs"> <button class="tab-btn" data-pos="react">React 招聘</button> <button class="tab-btn" data-pos=".net">.NET 招聘</button> <button class="tab-btn" data-pos="flutter">Flutter 招聘</button> </div> <script> const tabBtns = document.querySelectorAll('.tab-btn'); tabBtns.forEach(btn => { btn.addEventListener('click', (e) => { const targetPos = e.target.dataset.pos; const targetUrl = `/career/hiring-${targetPos}`; // 整页刷新跳转用这个 window.location.href = targetUrl; // 如果是单页应用不需要刷新,用history改URL再局部刷新内容即可 // history.pushState(null, '', targetUrl); // loadPositionContent(targetPos); }) }) </script>
常见踩坑点:如果开启了静态文件中间件,确保路由配置写在app.UseStaticFiles()之后、app.Run()之前,避免带点的路径(比如/career/hiring-.net)被误识别为静态文件请求返回404。
内容的提问来源于stack exchange,提问作者Kylie
相关产品推荐
相关产品推荐

