gpt4 book ai didi

c# - 为其他开发人员提供的API中处理异常时的最佳C#做法

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:18 27 4
gpt4 key购买 nike

如果您想分享更多信息,可以在这里找到整个资源
  指针:
  
  https://github.com/sergiotapia/DreamInCode.Net


基本上,我的API将为其他开发人员提供一种从http://www.dreamincode.net访问信息的简便方法-在我的库中的一种方法中,我编写了以下代码:

public UserProfile FindUserById(int id)
{
if (id <= 0)
throw new ArgumentOutOfRangeException("id", id, "The user ID must be greater than 0.");

string xmlEndPoint = string.Format("http://www.dreamincode.net/forums/xml.php?showuser={0}", id.ToString());
string xmlResponse;

using (WebClient client = new WebClient())
{
try
{
xmlResponse = client.DownloadString(xmlEndPoint);
}
catch (Exception e)
{
throw new Exception("Error: " + e.InnerException);
}
}

if (String.IsNullOrEmpty(xmlResponse))
throw new Exception("Error: The XML endpoint did not respond.");

return UserParser.ParseUser(xmlResponse);
}


就对其他用户的实用性而言,我是否这样做是最好的方法? .InnerException是否足以让其他开发者知道出了什么问题?

感谢您的时间。 :)



编辑:

因此,按照您的建议,我写道:

using (WebClient client = new WebClient())
{
try
{
xmlResponse = client.DownloadString(xmlEndPoint);
}
catch (Exception e)
{
throw new Exception("Error: Something went wrong, please check the InnerException.", e);
}
}


这是要走的路吗?这是否保留了堆栈跟踪?我做对了吗?



编辑2:

那么这是理想的解决方案吗?

//Just let it explode?
using (WebClient client = new WebClient())
{
xmlResponse = client.DownloadString(xmlEndPoint);
}

最佳答案

Don't throw Exception。而是,抛出适当的派生类型。
除非您要提供其他详细信息,否则不要包装异常(throw中的catch)。
(例如页面失败的原因,或者您认为页面失败的原因)
包装异常时,请始终将原始异常作为InnerException构造函数参数传递。这提供了对原始堆栈跟踪以及异常中所有其他信息的访问。

关于c# - 为其他开发人员提供的API中处理异常时的最佳C#做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7458909/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com