Skip to content

Add 'extensions' argument to ControllerBase.Problem(...) #19873

@wu-yafeng

Description

@wu-yafeng

I am trying to write a error handling controller with app.UseErrorHandler()

[Route("error")]
    public class ErrorController : ControllerBase
    {
        public IActionResult Get()
        {
            var feature = HttpContext.Features.Get<IExceptionHandlerFeature>();

            if (feature.Error is DbUpdateConcurrencyException dberror)
            {
                var result = Problem(detail: "One or more entities are updated in concurrency",
                    statusCode: StatusCodes.Status409Conflict,
                    title: dberror.Message);

                var problemDetails = (ProblemDetails)result.Value;

                var entities = dberror.Entries.Select(x => x.Entity).OfType<IEntity>().Select(x => new
                {
                    Type = x.GetType().Name,
                    x.Id
                });

                problemDetails.Extensions.Add("Entities", entities);
                return result;
            }

            // default internal server error result
            return Problem();
        }
    }

Describe the solution you'd like

Consider add argument to Problem() method?

return Problem(detail: "One or more entities are updated in concurrency",
                    statusCode: StatusCodes.Status409Conflict,
                    title: dberror.Message,
                    extensions:"Entities",entities)

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-mvcIncludes: MVC, Actions and Controllers, Localization, CORS, most templates

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions