防止 QueryString.Add() 进行 URL 编码

3
我正在使用OData制作一个Restful API,由于某些原因,我想在中间件内强制进行扩展过滤。因此,如果客户端发送以下内容:

http://localhost:52973/odata/customers

中间件应自动将其更改为:

http://localhost:52973/odata/customers?$expand=Contact,Address

为了实现这一点,我在我的中间件内做了一个简单的if语句。
if (ctx.Request.Path.Value.Contains("customers") && !ctx.Request.QueryString.Value.Contains("?$expand"))
{
    string uri = @"?$expand=";
    ctx.Request.QueryString = ctx.Request.QueryString.Add(uri, "Contact,Address");
}

不幸的是,它一直生成以下内容:{?%3F%5C$expand%5C%3D=Contact,Address}

我尝试在uri字符串中添加反斜杠,但这并没有解决问题。


这只是URL编码。'%3F'代表'?','%5C'代表'','%3D'代表'='。 - momo
如何移除它。 - Falcon
请参见以下链接:https://dev59.com/_l0a5IYBdhLWcg3wva16#29993210 - momo
1个回答

0
我会认为它是对 "$" 字符进行 URL 编码("转义")以使其更安全,因此我不会从那个角度来解决这个问题。我会修改您的请求消费者以对请求进行 URL 解码,这可能会自动完成。请参见 QueryString.ToUriComponent,还有 QueryString.ToString() 方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接