将查询字符串附加到预先构造的URI(C#,Unity3D)

本文关键字:URI Unity3D 字符串 查询 | 更新日期: 2023-09-27 18:26:12

使用Unity3D和BestHttp插件,是否有更好的方法将查询字符串附加到请求的URI,然后像下面所示那样重建HTTP请求?请注意,Unity正在mono 3.5的子集上运行。

var str = _request.Uri.OriginalString;
    str += "&page_number=0";
    _request = new HTTPRequest(new Uri(str));

编辑**

谢谢你,

不过我觉得我不够清楚。问题不在于如何创建字符串,而在于如何将该页码附加到已经构建/配置的请求中,而不必重新构建完整的HTTP请求并设置其所有回调和其他值。httpRequest的URI的集合访问器不可访问。

将查询字符串附加到预先构造的URI(C#,Unity3D)

编辑:Uri属性是只读的,因为向第三方服务器公开cookie、表单数据和其他潜在的敏感信息太容易让人大吵大闹。为了避免这种情况,插件将不允许您对不同的Uri重复使用相同的请求。


我认为你能做的最好的事情就是使用UriBuilder类:

UriBuilder builder = new UriBuilder(req.CurrentUri);
builder.Query += "page_number=0";
Debug.Log(builder.Uri);

它将添加第一个"?"字符,但对于Unity中的当前实现,如果多次使用+=运算符,它将添加多个"??"字符:

UriBuilder builder = new UriBuilder(req.CurrentUri);
builder.Query += "page_number=0";
builder.Query += "&page_number=2";
builder.Query += "&page_number=4";
Debug.Log(builder.Uri);

这将产生这样的输出:

http://httpbin.org/get???page_number=0&page_number=2&page_number=4

因此,您可以与这些限制作斗争,也可以坚持原来的字符串方法。

我发现Flurl库很有用https://github.com/tmenier/Flurl这只是一个简单的扩展集合,可以帮助您从字符串开始构建URL

例如,在您的场景中,它将类似于

var str = _request.Uri.OriginalString.SetQueryParams("page_number", "0");

它有一个Fluent API,所以很容易构建url在该项目的主页上,有一个例子不言自明

var result = await "https://api.mysite.com"
.AppendPathSegment("person")
.SetQueryParams(new { api_key = "xyz" })
.WithOAuthBearerToken("my_oauth_token")
.PostJsonAsync(new { first_name = firstName, last_name = lastName })
.ReceiveJson<T>();

这个例子做的比您需要的多得多,因为它已经发布了一些内容并读取了响应,所以您可以使用扩展来构建路径和查询字符串