You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC路由自动Slugify:如何将路由参数中的空格自动转为下划线

路由参数空格转下划线解决方案

下面提供3种可落地的实现方案,你可以根据自己的业务场景选择:

方案1:单接口快速处理(推荐仅单接口有需求时使用)

直接在Action方法入口处替换参数中的空格为下划线即可,无需修改其他全局配置,改动最小:

[Route("VerseExkurs/Technologien/{technologie}")]
public async Task<ActionResult> Details(string technologie)
{
    // 新增这一行即可完成转换
    technologie = technologie?.Replace(" ", "_") ?? string.Empty;

    TechnologieRootobject TechnologieInfo = new TechnologieRootobject();
    // 后续原有逻辑保持不变...
}

方案2:自定义路由参数转换器(推荐多接口有相同需求时使用)

通过ASP.NET Core内置的参数转换能力实现全局/指定参数自动转换,不需要每个Action单独写替换逻辑:

  1. 首先创建自定义参数转换器类
using Microsoft.AspNetCore.Routing;

public class SpaceToUnderlineTransformer : IParameterTransformer
{
    public string Transform(object value)
    {
        if (value is string strVal)
        {
            return strVal.Replace(" ", "_");
        }
        return value?.ToString() ?? string.Empty;
    }
}
  1. 在项目启动配置中注册转换器(.NET 6+ 写在Program.cs中,.NET 5及更早写在Startup.cs的ConfigureServices方法中)
builder.Services.AddRouting(options =>
{
    // 注册转换器别名,后续可以直接在路由约束中使用
    options.ConstraintMap.Add("spaceToUnderline", typeof(SpaceToUnderlineTransformer));
});
  1. 修改路由属性,给需要转换的参数加上对应约束即可
// 加上:spaceToUnderline约束后该参数会自动完成空格转下划线
[Route("VerseExkurs/Technologien/{technologie:spaceToUnderline}")]
public async Task<ActionResult> Details(string technologie)
{
    // 此处拿到的technologie已经是空格替换为下划线后的结果
    // 原有逻辑保持不变...
}

额外优化提示

你现有代码中调用Res.Content.ReadAsStringAsync().Result使用了同步阻塞调用,在async方法中存在死锁风险,建议修改为异步等待:

// 原代码:var TechnologieResponse = Res.Content.ReadAsStringAsync().Result;
// 修改为:
var TechnologieResponse = await Res.Content.ReadAsStringAsync();

内容的提问来源于stack exchange,提问作者Blizii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 11:36:03