From 6f83e8c7cc4d3e67d240e45a7ffff1baba6c38c5 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Thu, 4 Aug 2022 15:04:55 +0500 Subject: [PATCH] ControllerBase. Add BadRequestBuilder and extentionMethod. --- AsbCloudWebApi/Extentions.cs | 57 ++++++++++++++++++- .../Middlewares/PermissionsMiddlware.cs | 1 + 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/AsbCloudWebApi/Extentions.cs b/AsbCloudWebApi/Extentions.cs index 17a950fb..1179c25e 100644 --- a/AsbCloudWebApi/Extentions.cs +++ b/AsbCloudWebApi/Extentions.cs @@ -1,7 +1,9 @@ using AsbCloudApp.Data; +using System.Collections.Generic; +using System.Linq; using System.Security.Claims; -namespace AsbCloudWebApi +namespace Microsoft.AspNetCore.Mvc { public static class Extentions { @@ -26,5 +28,58 @@ namespace AsbCloudWebApi ? uid : null; } + + public static IActionResult MakeBadRequest(this ControllerBase controller, string paramName, params string[] errors) + { + return controller.BadRequest(new + { + name = paramName, + errors, + }); + } + + public static BadRequestBuilder BadRequestBuilder(this ControllerBase controller, string paramName, params string[] errors) + => new BadRequestBuilder(paramName, errors); + } + + public class BadRequestBuilder + { + private readonly Dictionary> body; + + private List GetOrCreateNew(string paramName) + { + List par; + if (body.ContainsKey(paramName)) + par = body[paramName]; + else + { + par = new List(); + body[paramName] = par; + } + return par; + } + + public BadRequestBuilder(string paramName, params string[] errors) + { + body = new(); + body[paramName] = new List(errors); + } + + public BadRequestBuilder Add(string paramName, params string[] errors) + { + var par = GetOrCreateNew(paramName); + par.AddRange(errors); + return this; + } + + public BadRequestObjectResult Build() + { + var o = body.Select(e => new { name = e.Key, errors = e.Value.ToArray() }); + + return new BadRequestObjectResult(o); + } + + public static implicit operator BadRequestObjectResult(BadRequestBuilder d) => d.Build(); } } + diff --git a/AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs b/AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs index 43492bda..5373cf64 100644 --- a/AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs +++ b/AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs @@ -1,6 +1,7 @@ using AsbCloudApp.Services; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using System; using System.Threading.Tasks;