2015-12-08 46 views
0

使用Unity3D和BestHttp插件,是否有更好的方式将查询字符串附加到请求的URI,然后重建HTTP请求,如下所示?注意Unity是在mono 3.5的子集上运行的。将查询字符串附加到预构建的URI(C#,Unity3D)

var str = _request.Uri.OriginalString; 

    str += "&page_number=0"; 

    _request = new HTTPRequest(new Uri(str)); 

编辑**

谢谢

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

+0

更新了我的答案,以获取关于为什么Uri属性为只读的更多说明。 – Ben

回答

1

为您编辑: 的URI属性为读 - 仅仅是因为通过向第三方服务器公开cookies,形式数据和其他潜在的敏感信息来向自己发出警告是很容易的。 为了避免这种情况,该插件不会让你重用不同的Uri相同的请求。


我认为你能做的最好是使用UriBuilder类:“?”

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

这将增加第一char,但是对于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

所以,你可以用这些限制的斗争,或者你可以用你的原始字符串的方法坚守。

+0

感谢您的更新 – CostelloNicho

1

我找到有用的Flurl库https://github.com/tmenier/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>(); 

的例子做得更多,你需要什么,因为它已经发布的东西,读取响应,所以你可以使用扩展构建路径和查询字符串