首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity3D C# WWW类:在每次请求后执行代码

Unity3D C# WWW类:在每次请求后执行代码
EN

Stack Overflow用户
提问于 2015-10-08 10:35:55
回答 1查看 666关注 0票数 0

我在网上找不到任何线索,因为我想很多人已经为了复杂的东西而放弃了联合的WWW课程。我正在使用WWW类与我的REST对话,我需要找到一种在每次请求之后执行一些代码的方法。(如果响应为401,我需要检查响应代码并执行一些默认行为)

有什么简单的方法可以做到这一点吗?

(我使用协同机制发送请求)

提前谢谢。

更新:当前代码示例

Auth.cs:

代码语言:javascript
复制
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));
        }

    }

用法:

代码语言:javascript
复制
StartCoroutine (auth.Login (data, new Action<APIResponse> (response => {
            //Do stuff

        }), new Action<APIResponse> (response => {
            //Do stuff
        })));
EN

回答 1

Stack Overflow用户

发布于 2015-10-08 10:46:05

我不使用WWW和rest来实现“异步”方式,使用超时和异常处理为我工作:

代码语言:javascript
复制
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;
    }

}

要使用此功能,请执行以下操作:

代码语言:javascript
复制
var result = JsonUtils.PostJson("http://192.168.1.1:8080", "SomeEndPoints/abc/def", jsonString);
if (string.IsNullOrEmpty(result))
{
     //Error
}
else
{
      //Success
}

Update:要确保这样的调用不会阻塞UI,请使用以下代码:

代码语言:javascript
复制
Loom.RunAsync(() => {
    var result = JsonUtils.PostJson("http://192.168.1.1:8080", "SomeEndPoints/abc/def", jsonString);
    if (!string.IsNullOrEmpty(result)) {

    }
});

您可以下载织机这里。示例使用这样的代码可以用下面的GIF动画演示,注意UI (循环指示器)没有被阻塞!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33013341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档