将查询字符串附加到预先构造的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属性是只读的,因为向第三方服务器公开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>();
这个例子做的比您需要的多得多,因为它已经发布了一些内容并读取了响应,所以您可以使用扩展来构建路径和查询字符串