You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中API调用异常处理及向UI传递的方案问询

Unity API调用的错误处理与UI传递方案确认

我此前有ASP.NET API开发经验,这类项目里通常用错误处理中间件来精简控制器代码。现在我在研究Unity中调用API时的错误处理方式,以及如何将错误信息传递到用户界面,想确认这类场景下错误处理的时机和实现方式是否合理。

当前代码流程

现有代码采用controller/repository模式,流程如下:

  • UI按钮触发OnLoginButtonPressed事件
  • AuthController类响应事件,调用Login方法执行逻辑:
public async void Login(LoginModel input)
{
 var result = await AuthRepo.instance.Login(input);
 app.token = result; 
 EventService.OnSuccessfulLogin();
}
  • AuthRepo负责调用API并返回Token(JWT字符串的包装类),未添加异常处理的代码如下:
public async Task<Token> Login(LoginModel input)
{
  string json = JsonConvert.SerializeObject(input);
  var request = UnityWebRequest.Post(app.baseURL + "authentication/login", json);
  request.SetRequestHeader("Content-Type", "application/json");
  request.SendWebRequest();
  while (!request.isDone)
  {
    await Task.Yield();
  }

  if (request.result == UnityWebRequest.Result.Success)
  {
    Token token = JsonConvert.DeserializeObject<Token>(request.downloadHandler.text);
    return token;
  }
  else
  {
    throw 
  }
}

我设想的错误处理逻辑

为了给用户提示连接错误、无效输入等信息,我计划在AuthRepo中添加异常抛出逻辑:

if (request.result == UnityWebRequest.Result.Success)
{
    Token token = JsonConvert.DeserializeObject<Token>(request.downloadHandler.text);
    return token;
}
else if (request.result == UnityWebRequest.Result.ConnectionError)
{
    throw new ConnectionException(request.error);
}
else if (request.result == UnityWebRequest.Result.DataProcessingError)
{
    throw new BadRequestException(request.error);
}
else
{
    throw new System.Exception(request.error);
}

这段判断逻辑会重复出现在每个仓库的每个API调用方法中,除非抽成辅助方法复用。之后在AuthController中捕获异常并触发对应事件通知UI:

try {
    var result = await AuthRepo.instance.Login(input);
    app.token = result; 
    EventService.OnSuccessfulLogin();
}
catch (ConnectionException ex)
{
   EventService.OnConnectionError(ex.Message);
   // UI监听该事件并显示连接错误提示
}
catch (BadRequestException ex)
{
   EventService.LoginFailedError(ex.Message);
}
catch (Exception ex)
{
   EventService.UnknownError(ex.Message);
}

(注:原代码的finally块存在逻辑问题,无法直接访问异常对象,此处调整为捕获通用Exception分支处理未知错误)

疑问

这种处理方式是否合理?会不会导致代码被大量异常处理逻辑淹没?我看过一些YouTube视频,类似的处理思路被认可,但那些案例并未覆盖我这种API调用场景,因此想确认该方案的正确性。

内容的提问来源于stack exchange,提问作者Gary Frewin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:11:06