我发送httpRequest并在try块中获取httpResponse。现在我真的不在乎我出于几个原因会得到什么类型的异常。
try
{
var request = WebRequest.Create(new Uri("MyUrl")) as HttpWebRequest;
request.GetResponse();
}
catch(Exception)
{
}
FxCop希望我给出特定的异常,所以在我的情况下我需要创建几个catch块,如下所示:
NotSupportedException
ArgumentNullException
SecurityException
InvalidOperationException
ProtocolViolationException
NotSupportedException
WebException
如何处理此警告并避免同时编写这些警告?
答案 0 :(得分:4)
与此主题中提到的another question类似,如果要捕获异常,则必须在处理程序中设置最终throw
,以防止出现警告。
来自此警告的MSDN documentation:
要修复违反此规则的行为,请捕获更具体的例外,或 重新抛出一般异常作为catch中的最后一个语句 块。强>
那就是说,这对你的情况没有多大帮助,因为你想“吞下”异常,而不是重新抛出异常。看看这个六个特定例外的列表,我无法想象花时间(严重像五分钟)来处理most中的每一个都是一个痛苦的经历。 recommended way可能。这不是经常发生的事情,而WebRequest只是极少数情况之一。
如果您的应用程序具有显着的生命周期,那么随着时间的推移,您将发现自己为这些异常中的每一个实现处理程序的可能性。没有人喜欢“发生一般错误405”错误消息。这可能不是KISS,但是建立基础将为您提供避免捕获所有异常(例如OutOfMemoryException
)的好处,并且还会阻止FxCop警告(以及对挑剔的开发人员的蔑视)。
如果您在应用程序中生成了大量WebRequest,那么可能有一个帮助类可能会引发单个WebFetcherException
并且还有更多有用的错误消息。这是一个例子:
public static class WebFetcher
{
public WebResponse FetchFromUrl(Uri uri)
{
try
{
var request = WebRequest.Create(new Uri("MyUrl")) as HttpWebRequest;
return request.GetResponse();
}
catch (NotSupportedException ex)
{
//you could customize the error messages to be more suitable for your
//application, or leaving room for future error handling
throw new WebFetcherException(ex.Message, ex);
}
catch (ArgumentNullException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
catch (SecurityException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
catch (ProtocolViolationException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
catch (WebException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
catch (InvalidOperationException ex)
{
throw new WebFetcherException(ex.Message, ex);
}
}
public class WebFetcherException : Exception
{
public WebFetcherException(string message, Exception inner)
: base(message, inner)
{ }
}
}
答案 1 :(得分:2)
您可以停用多个警告,我总是停用此警告: - )
答案 2 :(得分:1)
fxCop警告是建议,而不是强制要求。
换句话说,您可以自由判断是否遵循fxCop提出的指南和建议。
这个特别的建议就在那里,因为你可能想要以不同的方式处理不同类型的错误。如果情况并非如此,您可以ignore this rule,这样就不会使您的警告列表混乱。
您比fxCop更了解您的业务规则和编码标准。它只是根据可能适用于您的特定情况的最佳实践提出建议。
可以在此处找到更多信息:http://msdn.microsoft.com/en-us/library/bb429303(VS.80).aspx
答案 3 :(得分:-1)
试着把它留空
try
{
var request = WebRequest.Create(new Uri("http://localhost:59449/stwebapi/getstatus?userId=" + wwId)) as HttpWebRequest;
request.GetResponse();
}
catch
{
}
需要说这是非常糟糕的设计,所以最好遵循FxCop
指南,或至少处理异常,并记录(至少)