如何正确捕获和处理 Facebook 的 Http get 请求中的错误 api
How to correctly catch and handle errors in Http get request to Facebook api
我正在尝试使用从 Facebook 收到的代码从 Facebook 的图表 API 接收访问令牌。这是我第一次在 .NET CORE 中使用 APIs。该代码似乎工作正常,但我不确定我是否以正确的方式处理响应和捕获异常。虽然我可以使用 TRY CATCH,但仍然感觉不太舒服。我想让这个方法尽可能健壮。
非常感谢您的帮助。
处理Class
public class FacebookService : IFacebookService
{
private readonly HttpClient _httpClient;
private readonly IConfiguration configuration;
public FacebookService(HttpClient httpClient, IConfiguration iConfig)
{
_httpClient = httpClient;
configuration = iConfig;
}
public async Task<string> GetShortLiveToken(string code)
{
try
{
string appId = configuration.GetSection("FacebookApp").GetSection("AppID").Value;
string appSecret = configuration.GetSection("FacebookApp").GetSection("AppSecret").Value;
var getTokenUri = $"oauth/access_token?client_id={appId}&client_secret={appSecret}&code={code}&redirect_uri=https://localhost:44373/Home/HandleFbAccess";
var response = await _httpClient.GetAsync(getTokenUri);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
else
{
return response.ReasonPhrase;
}
}
catch(Exception ex)
{
throw ex;
}
}
public async Task<string> GetLongLiveToken(string shortlivedtoken)
{
throw new NotImplementedException();
}
}
调用方法
public async Task<IActionResult> HandleFbAccess(string code, string granted_scopes)
{
try
{
var result = await _facebookService.GetShortLiveToken(code);
// more things to do here
//.....
return View("Index");
}
catch(Exception ex)
{
throw ex;
}
}
try{}catch(Exception ex){}
在你的代码出现异常时有效,比如nullpointexception
,但是你现在担心httpclient send request
,你应该知道这个方法只能抛出这些异常所有这些例外都与 facebook api.
无关
我对你的场景的想法是在这里继续使用try catch
但是你需要根据catch{}
中的异常类型设置操作并在这里编写自定义逻辑代码,以处理http响应,例如404,400,503 个问题等:
if (response.IsSuccessStatusCode){
return await response.Content.ReadAsStringAsync();
}else{
return response.ReasonPhrase;
}
我正在尝试使用从 Facebook 收到的代码从 Facebook 的图表 API 接收访问令牌。这是我第一次在 .NET CORE 中使用 APIs。该代码似乎工作正常,但我不确定我是否以正确的方式处理响应和捕获异常。虽然我可以使用 TRY CATCH,但仍然感觉不太舒服。我想让这个方法尽可能健壮。
非常感谢您的帮助。
处理Class
public class FacebookService : IFacebookService
{
private readonly HttpClient _httpClient;
private readonly IConfiguration configuration;
public FacebookService(HttpClient httpClient, IConfiguration iConfig)
{
_httpClient = httpClient;
configuration = iConfig;
}
public async Task<string> GetShortLiveToken(string code)
{
try
{
string appId = configuration.GetSection("FacebookApp").GetSection("AppID").Value;
string appSecret = configuration.GetSection("FacebookApp").GetSection("AppSecret").Value;
var getTokenUri = $"oauth/access_token?client_id={appId}&client_secret={appSecret}&code={code}&redirect_uri=https://localhost:44373/Home/HandleFbAccess";
var response = await _httpClient.GetAsync(getTokenUri);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
else
{
return response.ReasonPhrase;
}
}
catch(Exception ex)
{
throw ex;
}
}
public async Task<string> GetLongLiveToken(string shortlivedtoken)
{
throw new NotImplementedException();
}
}
调用方法
public async Task<IActionResult> HandleFbAccess(string code, string granted_scopes)
{
try
{
var result = await _facebookService.GetShortLiveToken(code);
// more things to do here
//.....
return View("Index");
}
catch(Exception ex)
{
throw ex;
}
}
try{}catch(Exception ex){}
在你的代码出现异常时有效,比如nullpointexception
,但是你现在担心httpclient send request
,你应该知道这个方法只能抛出这些异常所有这些例外都与 facebook api.
我对你的场景的想法是在这里继续使用try catch
但是你需要根据catch{}
中的异常类型设置操作并在这里编写自定义逻辑代码,以处理http响应,例如404,400,503 个问题等:
if (response.IsSuccessStatusCode){
return await response.Content.ReadAsStringAsync();
}else{
return response.ReasonPhrase;
}