[英]Unity3D C# WWW class: execute code after every request
我在网上找不到任何线索,因为我想很多人都放弃了Unity的WWW类来学习复杂的东西。 我正在使用WWW类与我的REST API进行通信,并且我需要找到一种在每次请求后执行一些代码的方法。 (如果响应为401,我需要检查响应代码并执行一些默认行为)
有没有简单的方法可以做到这一点?
(我正在使用协程发送请求)
提前致谢。
更新:当前代码示例
Auth.cs:
public IEnumerator Login(WWWForm data, Action<APIResponse> success, Action<APIResponse> failure)
{
WWW request = new WWW (API + "auth/authenticate", data);
yield return request;
if (request.responseHeaders ["STATUS"] == "HTTP/1.1 401 Unauthorized") {
//Do something, I want to do this on every request, not just on this login method
}
if (request.error != null) {
failure (new APIResponse(request));
}
else {
//Token = request.text.Replace("\"", "");
Token = request.text;
Debug.Log (Token);
success (new APIResponse (request));
}
}
用法:
StartCoroutine (auth.Login (data, new Action<APIResponse> (response => {
//Do stuff
}), new Action<APIResponse> (response => {
//Do stuff
})));
我没有使用带有REST API的WWW来实现“异步”方式,而是使用超时和异常处理对我有效:
public static string PostJson(string host, string resourceUrl, object json)
{
var client = new RestClient(host);
client.Timeout = Settings.LIGHT_RESPONSE_TTL; //set timeout duration
var request = new RestRequest(resourceUrl, Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(json);
try
{
var response = client.Execute(request);
return response.Content;
}
catch (Exception error)
{
Utils.Log(error.Message);
return null;
}
}
要使用此功能:
var result = JsonUtils.PostJson("http://192.168.1.1:8080", "SomeEndPoints/abc/def", jsonString);
if (string.IsNullOrEmpty(result))
{
//Error
}
else
{
//Success
}
更新:为确保此类调用不会阻止UI,请使用以下代码:
Loom.RunAsync(() => {
var result = JsonUtils.PostJson("http://192.168.1.1:8080", "SomeEndPoints/abc/def", jsonString);
if (!string.IsNullOrEmpty(result)) {
}
});
您可以在此处下载Loom。 可以在下面的GIF动画中演示使用此类代码的示例,请注意,UI(圆形指示器)未阻塞!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.