Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将查询字符串附加到预先构造的URI(C#,Unity3D)_C#_Http_Plugins_Unity3d_Uri - Fatal编程技术网

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

将查询字符串附加到预先构造的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)); 编辑** 谢谢, 不过我觉得我还不够清楚。问题不在于如何创建字符串,而在于如何将该页

使用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的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属性为何为只读的更多解释。