search
HomeBackend DevelopmentC#.Net TutorialAsp.Net Web API exception handling experience summary

In the previous tutorial, I introduced to you the development and use of Filter in Web API. When talking about ExceptionFilter, there was a pitfall: ExceptionFilter can only intercept and process events that occur during Action execution. Exception, if an exception occurs outside of the Action execution process, ExceptionFilter is powerless.

These exceptions include:

1. Exceptions that occur in the Controller construction method

2. Exceptions that occur in MessageHandlers

3. Exceptions that occur during the routing process Exceptions

 4. Exceptions that occur during the serialization/deserialization process of Body

It can be seen that ExceptionFilter can only solve the exceptions that occur after the ApiControler is successfully instantiated and during the execution of Action. Exceptions; in order to solve this problem, in addition to ExceptionFilter, two extension points for exception recording and processing are introduced in the WEB API:

IExceptionLogger and IExceptionHandler.

and these two extensions are registered and managed as a pipeline component for the web API, and they have different division of labor:

iexceptionLogger as an abnormal log record component. Recording runs through the entire Web API life cycle. In the Web API framework, any uncaught/handled exception in any request cycle will first enter the exception logging pipeline for exception Log recording. In the Web API Multiple IExceptionLogger instances can be registered to be responsible for different exception handling.

                                                                                                                                                              IExceptionHandler, as an exception handling component, is responsible for the processing after the exception occurs. It is at the end of the exception processing pipeline. When the IExceptionLogger component completes a recording and there is no relevant ExceptoinFilter to handle the exception, it will finally Call ExceptionHandler for exception handling. In Web API, there is only one ExceptionHandler for exception handling.

In the Web API framework, two base classes are given: ExceptionLogger and ExceptionHandler. When using the ExceptionLogger base class, it provides the ShouldLog virtual method. This method is called in the base class and its function is to avoid The same exception is repeatedly recorded by the same ExceptionLogger instance (for example, when the exception is thrown again in the subsequent pipeline, or the same ExceptionLogger object is accidentally registered twice, there is a possibility of repeated recording). We can also override the ShouldLog method. Add our own exception record judgment logic to make different ExceptionLogger calls for different scenarios. If you are interested, you can decompile the ExceptionLogger base class and take a look. It uses the display interface implementation, which is a very interesting technique. Let's look at an example of using ExceptionLogger:


    public class ErroLogger : ExceptionLogger
    {        public  async Task LogAsync(ExceptionLoggerContext context, CancellationToken cancellationToken)
        {            var sb = new StringBuilder();            //获取Log组件
            ILogger log = LogManager.GetCurrentClassLogger();            var request = context.Request;

            sb.AppendLine("URL:");            //获取URL
            var url = request.RequestUri.ToString();
            sb.AppendLine(url);
           
            log.Error(context.Exception,sb.ToString(),"");
        }        public override bool ShouldLog(ExceptionLoggerContext context)
        {            return context.Exception is DemoException && base.ShouldLog(context);
        }
    }

In this example, we rewrite ShouldLog to ensure that this ExceptionLogger only records exceptions of the type DemoException, and The base class method is also called to ensure that the same exception will not be recorded repeatedly. In the LogAsync method, I recorded the request URL that caused the exception through the Log component, and also recorded the exception information.

Next we need to register this component:

Write


config.Services.Add(typeof(IExceptionLogger),new ErroLogger());
# in the Register method in the App_Start/WebApiConfig.cs file ## In this way, an exception recording component for DemoException has been developed and registered. When an unhandled DemoException occurs in the Web API execution pipeline, this component will be called for recording.

Next we write an ExceptionHandler. In the entire Web API framework, ExceptionHandler can only provide one instance. Like ExceptionLogger, we can inherit the ExceptionHandler base class to simplify exception handling. ShouldHandle is also provided in ExceptionHandler Method to determine whether the exception should be handled to avoid repeatedly handling exceptions thrown repeatedly by other links in the pipeline. We also provide an example:


    public class ErrorHandler : ExceptionHandler
    {        public override async Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)
        {            if (context.Exception is DemoException)
            {
                context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.BadRequest,new {Message=context.Exception.Message}));
            }            else
            {
                context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.InternalServerError,new {Message = "服务器已被外星人绑架"}));
            }
        }
}
In this example, we determine the type of exception and return different response content and different content to the client based on different exceptions. HTTP status code.

Then register this exception handling module in the configuration and write


config.Services.Replace(typeof(IExceptionHandler),new ErrorHandler());
in the Register method in the App_Start/WebApiConfig.cs file. This will replace The system's default ExceptionHandler can be used to handle exceptions using our custom Handler.

During the exception recording and processing process, we all encounter the corresponding exception context parameter. We can use this parameter to obtain the context of the current request, obtain the request, response (be careful, sometimes it will be empty), and capture We can use this information to better describe, record, and handle exceptions, such as the exception's catch block information.

At this point, the simple development of the ExceptionLogger component and ExceptionHandler component is completed. During the development process, we can see that ExceptionLogger is responsible for global exception recording. ExceptionLogger will capture and record any unhandled exceptions that occur under the Web API framework pipeline. The functions of ExceptionHandler and ExceptionFilter overlap, so when to use ExceptionHandler and when to use ExceptionFilter? We can list the differences between the two in the following table:

##Action conditionsControllerWeb API We can see from the above table that if the processing granularity is as detailed as the Controller and Action levels, the ExceptionFilter will be easier to handle. He has been able to pinpoint a certain Action and can then do customized development for the current Action. The scope of ExceptionHandler is much larger than that of ExceptionFilter, and it has more advantages in handling the global situation.

ExceptionFilter

ExceptionHandler

##Scope

ControllerAction

##Global

Number of instances

Unlimited

Globally unique

After successful instantiation

Loaded successfully After

I will talk about this about Web API exception handling. If there are any errors or questions in the article, you are welcome to point them out to me.

The above is the detailed content of Asp.Net Web API exception handling experience summary. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
The .NET Ecosystem: C#'s Role and BeyondThe .NET Ecosystem: C#'s Role and BeyondMay 03, 2025 am 12:04 AM

C# plays a core role in the .NET ecosystem and is the preferred language for developers. 1) C# provides efficient and easy-to-use programming methods, combining the advantages of C, C and Java. 2) Execute through .NET runtime (CLR) to ensure efficient cross-platform operation. 3) C# supports basic to advanced usage, such as LINQ and asynchronous programming. 4) Optimization and best practices include using StringBuilder and asynchronous programming to improve performance and maintainability.

C# as a .NET Language: The Foundation of the EcosystemC# as a .NET Language: The Foundation of the EcosystemMay 02, 2025 am 12:01 AM

C# is a programming language released by Microsoft in 2000, aiming to combine the power of C and the simplicity of Java. 1.C# is a type-safe, object-oriented programming language that supports encapsulation, inheritance and polymorphism. 2. The compilation process of C# converts the code into an intermediate language (IL), and then compiles it into machine code execution in the .NET runtime environment (CLR). 3. The basic usage of C# includes variable declarations, control flows and function definitions, while advanced usages cover asynchronous programming, LINQ and delegates, etc. 4. Common errors include type mismatch and null reference exceptions, which can be debugged through debugger, exception handling and logging. 5. Performance optimization suggestions include the use of LINQ, asynchronous programming, and improving code readability.

C# vs. .NET: Clarifying the Key Differences and SimilaritiesC# vs. .NET: Clarifying the Key Differences and SimilaritiesMay 01, 2025 am 12:12 AM

C# is a programming language, while .NET is a software framework. 1.C# is developed by Microsoft and is suitable for multi-platform development. 2..NET provides class libraries and runtime environments, and supports multilingual. The two work together to build modern applications.

Beyond the Hype: Assessing the Current Role of C# .NETBeyond the Hype: Assessing the Current Role of C# .NETApr 30, 2025 am 12:06 AM

C#.NET is a powerful development platform that combines the advantages of the C# language and .NET framework. 1) It is widely used in enterprise applications, web development, game development and mobile application development. 2) C# code is compiled into an intermediate language and is executed by the .NET runtime environment, supporting garbage collection, type safety and LINQ queries. 3) Examples of usage include basic console output and advanced LINQ queries. 4) Common errors such as empty references and type conversion errors can be solved through debuggers and logging. 5) Performance optimization suggestions include asynchronous programming and optimization of LINQ queries. 6) Despite the competition, C#.NET maintains its important position through continuous innovation.

The Future of C# .NET: Trends and OpportunitiesThe Future of C# .NET: Trends and OpportunitiesApr 29, 2025 am 12:02 AM

The future trends of C#.NET are mainly focused on three aspects: cloud computing, microservices, AI and machine learning integration, and cross-platform development. 1) Cloud computing and microservices: C#.NET optimizes cloud environment performance through the Azure platform and supports the construction of an efficient microservice architecture. 2) Integration of AI and machine learning: With the help of the ML.NET library, C# developers can embed machine learning models in their applications to promote the development of intelligent applications. 3) Cross-platform development: Through .NETCore and .NET5, C# applications can run on Windows, Linux and macOS, expanding the deployment scope.

C# .NET Development Today: Trends and Best PracticesC# .NET Development Today: Trends and Best PracticesApr 28, 2025 am 12:25 AM

The latest developments and best practices in C#.NET development include: 1. Asynchronous programming improves application responsiveness, and simplifies non-blocking code using async and await keywords; 2. LINQ provides powerful query functions, efficiently manipulating data through delayed execution and expression trees; 3. Performance optimization suggestions include using asynchronous programming, optimizing LINQ queries, rationally managing memory, improving code readability and maintenance, and writing unit tests.

C# .NET: Building Applications with the .NET EcosystemC# .NET: Building Applications with the .NET EcosystemApr 27, 2025 am 12:12 AM

How to build applications using .NET? Building applications using .NET can be achieved through the following steps: 1) Understand the basics of .NET, including C# language and cross-platform development support; 2) Learn core concepts such as components and working principles of the .NET ecosystem; 3) Master basic and advanced usage, from simple console applications to complex WebAPIs and database operations; 4) Be familiar with common errors and debugging techniques, such as configuration and database connection issues; 5) Application performance optimization and best practices, such as asynchronous programming and caching.

C# as a Versatile .NET Language: Applications and ExamplesC# as a Versatile .NET Language: Applications and ExamplesApr 26, 2025 am 12:26 AM

C# is widely used in enterprise-level applications, game development, mobile applications and web development. 1) In enterprise-level applications, C# is often used for ASP.NETCore to develop WebAPI. 2) In game development, C# is combined with the Unity engine to realize role control and other functions. 3) C# supports polymorphism and asynchronous programming to improve code flexibility and application performance.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)