C# 如何冒充异常
在我的MVC应用程序中,我有一个简单的场景:一个调用业务层的控制器,该层的角色是只调用api。业务服务代码如下:C# 如何冒充异常,c#,exception,asp.net-core,model-view-controller,C#,Exception,Asp.net Core,Model View Controller,在我的MVC应用程序中,我有一个简单的场景:一个调用业务层的控制器,该层的角色是只调用api。业务服务代码如下: public class ApiCaller : IApiCaller { public async Task<T> GetResponse<T>(Uri url) { using (var client = new HttpClient()) { client.DefaultReques
public class ApiCaller : IApiCaller
{
public async Task<T> GetResponse<T>(Uri url)
{
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
try
{
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(responseBody);
}
catch
{
..do something..
}
}
}
}
公共类ApiCaller:IApiCaller
{
公共异步任务GetResponse(Uri url)
{
使用(var client=new HttpClient())
{
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
尝试
{
var response=wait client.GetAsync(url);
response.EnsureSuccessStatusCode();
string responseBody=wait response.Content.ReadAsStringAsync();
返回JsonConvert.DeserializeObject(responseBody);
}
抓住
{
做点什么。。
}
}
}
}
对于单一责任概念,我希望层只调用API,并在出现问题时捕获异常。由于它不负责决定在抛出异常时返回什么(在上面的控制器中),而只是捕获异常,因此我想将异常冒泡到控制器。最终,控制器通过看到返回的结果出现异常,将返回一些内容,或者如果找不到服务,将返回404等等。。但它将负责决定归还什么,而不是商业服务。所以我的问题是:在这种情况下,最好的做法是什么?谢谢 在最简单的情况下,您可以直接让异常冒泡并在控制器中捕获它。如果您想变得更复杂,可以让业务层捕获预期的异常,然后抛出自己的预期异常类型。然后控制器(或异常处理过滤器)捕获这些业务异常并将其转换为HTTP响应代码。在最简单的情况下,您可以直接让异常冒泡并在控制器中捕获它。如果您想变得更复杂,可以让业务层捕获预期的异常,然后抛出自己的预期异常类型。然后,控制器(或异常处理过滤器)捕获这些业务异常并将其转换为HTTP响应代码。如果您不需要对异常执行任何操作,则忽略它将导致它在调用堆栈中“冒泡”,直到有东西捕获它(您将返回
404
)。如果您确实需要在发生异常(资源清理、服务器端日志记录等)时执行某些操作,但仍希望使其冒泡,然后,您仍然可以使用catch
块-只需在每个块末尾加上throw
,这样异常仍然会冒泡到下一个调用方。如果您不需要对异常执行任何操作,那么忽略它将导致它在调用堆栈中“冒泡”,直到有东西捕获它为止(在这里您将返回404
)。如果您确实需要在发生异常时执行某些操作(资源清理、服务器端日志记录等)但是您仍然希望它冒泡,然后您仍然可以使用catch
块-只需使用throw
结束每个块,这样异常仍然冒泡到下一个调用方。