asp.net 在处理请求之前从请求中删除查询字符串

xzv2uavs  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(164)

我想删除一个特定的查询字符串(即fbclid),Facebook将其添加到共享链接中进行跟踪(我假设)。我需要这样做才能使我的所有路由都工作,但我找不到一个简单的解决方案。
我正在使用ASP.NET Core 2.0,AWS lambda,API网关。
我尝试过使用重写器,但当替换为空字符串时,它会抛出异常。下面是我的代码:

app.UseRewriter(new RewriteOptions()
    .AddRewrite("\\?fbclid=(\\w*)", string.Empty, false));

我不希望重定向到一个干净的URL或获得没有查询参数的URL。相反,我需要更改当前请求,以便管道的其余部分正确处理它。

hlswsv35

hlswsv351#

要删除查询字符串,可以尝试Middleware,如

app.Use(async (context,next) =>
{                
    if (context.Request.Query.TryGetValue("fbclid", out StringValues query))
    {
        var items = context.Request.Query.SelectMany(x => x.Value, (col, value) => new KeyValuePair<string, string>(col.Key, value)).ToList();
        // At this point you can remove items if you want
        items.RemoveAll(x => x.Key == "fbclid"); // Remove all values for key
        var qb = new QueryBuilder(items);
        context.Request.QueryString = qb.ToQueryString();
    }
    await next.Invoke();
});

相关问题