将查询字符串附加到预先构造的URI(C#,Unity3D)
使用Unity3D和BestHttp插件,有没有更好的方法将查询字符串附加到请求的URI,然后像下面所示重建HTTP请求?请注意,Unity正在mono 3.5的子集上运行将查询字符串附加到预先构造的URI(C#,Unity3D),c#,http,plugins,unity3d,uri,C#,Http,Plugins,Unity3d,Uri,使用Unity3D和BestHttp插件,有没有更好的方法将查询字符串附加到请求的URI,然后像下面所示重建HTTP请求?请注意,Unity正在mono 3.5的子集上运行 var str = _request.Uri.OriginalString; str += "&page_number=0"; _request = new HTTPRequest(new Uri(str)); 编辑** 谢谢, 不过我觉得我还不够清楚。问题不在于如何创建字符串,而在于如何将该页
var str = _request.Uri.OriginalString;
str += "&page_number=0";
_request = new HTTPRequest(new Uri(str));
编辑**
谢谢,
不过我觉得我还不够清楚。问题不在于如何创建字符串,而在于如何将该页码附加到已构造/配置的请求,而不必重新构造完整的HTTP请求并设置其所有回调和其他值。httpRequest的URI的set访问器不可访问 我发现Flurl库很有用,它只是一个简单的扩展集合,可以帮助您从字符串开始构建URL 例如,在您的场景中,它将类似于
var str = _request.Uri.OriginalString.SetQueryParams("page_number", "0");
它有一个流畅的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>();
var结果=等待”https://api.mysite.com"
.附件段(“人”)
.SetQueryParams(新的{api_key=“xyz”})
.WithOAuthBeareToken(“我的OAuthToken”)
.PostJsonAsync(新的{first_name=firstName,last_name=lastName})
.ReceiveJson();
该示例所做的远远超出您的需要,因为它已经发布了一些内容并读取了响应,因此您可以使用扩展来构建路径和查询字符串,我发现Flurl库非常有用,它只是一个简单的扩展集合,可以帮助您从字符串开始构建URL 例如,在您的场景中,它将类似于
var str = _request.Uri.OriginalString.SetQueryParams("page_number", "0");
它有一个流畅的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>();
var结果=等待”https://api.mysite.com"
.附件段(“人”)
.SetQueryParams(新的{api_key=“xyz”})
.WithOAuthBeareToken(“我的OAuthToken”)
.PostJsonAsync(新的{first_name=firstName,last_name=lastName})
.ReceiveJson();
该示例所做的远远超出您的需要,因为它已经发布了一些内容并读取了响应,因此您可以使用扩展来构建路径和查询字符串,以便进行编辑: Uri属性是只读的,因为向第三方服务器公开Cookie、表单数据和其他潜在的敏感信息太容易让人大惊小怪。 为了避免这种情况,插件将不允许您对不同的Uri重复使用相同的请求
我认为您最好使用UriBuilder类:
UriBuilder builder = new UriBuilder(req.CurrentUri);
builder.Query += "page_number=0";
Debug.Log(builder.Uri);
它将添加第一个“?”字符,但对于Unity中的当前实现,如果多次使用+=运算符,它将添加多个“?”字符:
这将产生如下输出:
因此,您可以克服这些限制,也可以坚持原来的字符串方法。对于您的编辑: Uri属性是只读的,因为向第三方服务器公开Cookie、表单数据和其他潜在的敏感信息太容易让人大惊小怪。 为了避免这种情况,插件将不允许您对不同的Uri重复使用相同的请求
我认为您最好使用UriBuilder类:
UriBuilder builder = new UriBuilder(req.CurrentUri);
builder.Query += "page_number=0";
Debug.Log(builder.Uri);
它将添加第一个“?”字符,但对于Unity中的当前实现,如果多次使用+=运算符,它将添加多个“?”字符:
这将产生如下输出:
因此,您可以克服这些限制,也可以坚持原来的字符串方法。更新了我的答案,了解有关Uri属性为何为只读的更多解释。更新了我的答案,了解有关Uri属性为何为只读的更多解释。