Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何冒充异常_C#_Exception_Asp.net Core_Model View Controller - Fatal编程技术网

C# 如何冒充异常

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

在我的MVC应用程序中,我有一个简单的场景:一个调用业务层的控制器,该层的角色是只调用api。业务服务代码如下:

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
结束每个块,这样异常仍然冒泡到下一个调用方。