Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A middleware to handle exceptions according to standards defined in https://tools.ietf.org/html/rfc7807 for HTTP Apis.

Notifications You must be signed in to change notification settings

demirermustafa/ProblemNet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

11 Commits

Repository files navigation

ProblemNet

ProblemNET is a middleware library that implements rfc7807. The middleware catches all exceptions and handles according to exception type.
For more information: https://tools.ietf.org/html/rfc7807

Installation

Install-Package ProblemNet

Configuration

public class Startup
{
 public void ConfigureServices(IServiceCollection services)
 {
 services.AddProblemDetails(cfg => { cfg.DefaultTypeBaseUri = "https://sample.com/problemdetails/"; });
 services.AddMvc().
 UseProblemDetailsInvalidModelStateResponseFactory();
 }
 public void Configure(IApplicationBuilder app)
 {
 app.UseProblemDetailsExceptionHandler();
 ..
 ..
 ...
 }
}

Usage

Creating Problems

There are different ways to create problems.

  • Simple

     throw new ProblemDetailsException()
     {
     Type = "user-not-exists",
     Title = "User Not Exists",
     Status = (int)HttpStatusCode.NotFound,
     Detail = "Users cannot be found"
     };

    Will produce this response

     "type": "https://userservice.com/problemdetails/user-not-exists",
     "title": "User Not Exists",
     "status": 404,
     "detail": "Users cannot be found",
     "instance": "/api/Samples/problem-details-simple"
  • Additional Members

     throw new ProblemDetailsException
     {
     Status = (int)HttpStatusCode.NotFound,
     Title = $"Users cannot be found",
     Extensions =
     {
     new KeyValuePair<string, object>("Order", new { OrderId = 1, OrderDate = DateTime.UtcNow, Status = "Approved" }),
     new KeyValuePair<string, object>("UserId", 123)
     }
     };

    Will produce this

     "type": "https://userservice.com/problemdetails/",
     "title": "Users cannot be found",
     "status": 404,
     "instance": "/api/Samples/problem-details-additional-members",
     "order": {
     "orderId": 1,
     "orderDate": "2019年09月07日T14:24:45.1783264Z",
     "status": "Approved"
     },
     "userId": 123
  • Custom Validation Exception

    var validationProblems = new List<ValidationProblem>
     {
     new ValidationProblem("FirstName", "FirstName length must be less than 50 characters", "FirstName should only contain letters"),
     new ValidationProblem("Email", "Email address length must be greater than 5 characters", "Email address must be email format")
     };
    throw new ValidationProblemDetailsException(validationProblems.ToArray())
     {
     Detail = "Error while creating account. Please see errors for detail.",
     Status = (int)HttpStatusCode.BadRequest,
     Title = "Register Error"
     };
     

    Will produce this

     ```
  • Exceptions Except Problem Details

    throw new NullReferenceException();

    Will produce the following output. If the environment is development, the content of the exception property will not be empty.

     "exception": { },
     "type": "https://httpstatuses.com/500",
     "title": "Internal Server Error",
     "status": 500,
     "detail": "An error occurred while processing your request",
     "instance": "/api/Samples/unhandled-exception"
     ```

Response Headers

The same http response headers will be produced regardless of exception type on the lines below. Middleware also ensures that problem responses never cached.

 cache-control: no-cache, no-store, must-revalidate 
 content-type: application/problem+json; charset=utf-8 
 date: 2019年9月07日 14:03:55 GMT 
 expires: 0 
 pragma: no-cache 
 server: Kestrel 
 transfer-encoding: chunked 

About

A middleware to handle exceptions according to standards defined in https://tools.ietf.org/html/rfc7807 for HTTP Apis.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /