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

如何在Umbraco重写中停止自动转发查询字符串参数?

解决Umbraco/ASP.NET重写规则后链接自动附加cat参数的问题

这个问题我之前在做Umbraco项目的时候也碰到过,本质是ASP.NET的URL生成机制会自动保留当前请求的查询字符串参数——哪怕这个cat参数是通过重写规则隐式添加的,服务器端的请求上下文里依然存在这个参数,所以页面里的所有链接生成时都会自动带上它。下面给你几个可行的解决办法:

方法一:生成链接时显式清除cat参数

最直接的方式是在视图或代码里生成链接时,主动排除cat参数:

  • 如果是用ASP.NET的Url.Action方法生成控制器链接:

    // 显式设置cat为null,避免自动附加
    @Url.Action("Category", "Home", new { cat = (string)null })
    
  • 如果是Umbraco内容节点的链接,使用Url方法时指定不包含查询字符串:

    @Model.Url(mode: UrlMode.Absolute, includeQueryString: false)
    

这种方式适合你能控制链接生成代码的场景,精准解决单个或部分链接的问题。

方法二:通过中间件/HTTP模块移除请求上下文里的cat参数

如果希望全局解决这个问题,不让cat参数出现在任何后续的URL生成中,可以在重写完成后,从请求上下文里移除该参数:

针对ASP.NET Framework(传统Umbraco)

创建一个自定义HTTP模块:

public class RemoveCatParameterModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        // 在重写路径完成后触发
        context.PostRewritePath += (sender, e) =>
        {
            var httpContext = ((HttpApplication)sender).Context;
            if (httpContext.Request.QueryString["cat"] != null)
            {
                // 复制现有查询参数并移除cat
                var newQuery = new NameValueCollection(httpContext.Request.QueryString);
                newQuery.Remove("cat");
                
                // 更新请求的查询字符串
                httpContext.Request.QueryString.Clear();
                httpContext.Request.QueryString.Add(newQuery);
            }
        };
    }

    public void Dispose() { }
}

然后在web.config的<system.webServer>节点下注册这个模块:

<modules>
  <add name="RemoveCatParameterModule" type="YourNamespace.RemoveCatParameterModule" />
</modules>

针对ASP.NET Core(Umbraco 9+)

添加一个自定义中间件,放在重写中间件之后:

app.UseRewriter(); // 确保这行在你的重写规则配置之后
app.Use(async (context, next) =>
{
    if (context.Request.Query.ContainsKey("cat"))
    {
        // 移除cat参数并更新请求查询字符串
        var queryDict = context.Request.Query.ToDictionary(q => q.Key, q => q.Value);
        queryDict.Remove("cat");
        context.Request.Query = new QueryCollection(queryDict);
    }
    await next();
});

这样处理后,服务器端的请求上下文里就不会有cat参数了,所有链接生成时自然也不会附加它。

方法三:检查Umbraco路由配置

偶尔Umbraco的内容类型URL模式或路由缓存可能会意外保留参数,你可以:

  • 进入Umbraco后台,检查对应内容类型的URL模式,确保没有包含{cat}这类变量
  • 清理Umbraco的路由缓存(后台设置里的"刷新路由缓存"选项)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 21:27:47