From 2faf06d12f2824d737565f9ecd3d1b376f745341 Mon Sep 17 00:00:00 2001 From: hippiehunter Date: Tue, 17 Dec 2019 16:07:33 -0800 Subject: [PATCH 1/2] added model state validation helper --- Harmony.AspNetCore/Harmony.AspNetCore.synproj | 5 ++- Harmony.AspNetCore/ValidationHelper.dbl | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 Harmony.AspNetCore/ValidationHelper.dbl diff --git a/Harmony.AspNetCore/Harmony.AspNetCore.synproj b/Harmony.AspNetCore/Harmony.AspNetCore.synproj index 15f2ce94..9a81bb77 100644 --- a/Harmony.AspNetCore/Harmony.AspNetCore.synproj +++ b/Harmony.AspNetCore/Harmony.AspNetCore.synproj @@ -38,10 +38,12 @@ bin\AnyCPU\ReleaseNuget\ + + 2.2.5 + - @@ -50,6 +52,7 @@ + diff --git a/Harmony.AspNetCore/ValidationHelper.dbl b/Harmony.AspNetCore/ValidationHelper.dbl new file mode 100644 index 00000000..bad7683e --- /dev/null +++ b/Harmony.AspNetCore/ValidationHelper.dbl @@ -0,0 +1,31 @@ +import System +import System.Collections.Generic +import System.Text +import Microsoft.AspNetCore.Mvc +import Microsoft.AspNetCore.Mvc.ModelBinding + +namespace Harmony.AspNetCore + + public class ValidationHelper + + public static method ReturnValidationError, @IActionResult + state, @ModelStateDictionary + proc + data errorText = new List() + data errorPair, @KeyValuePair + + foreach errorPair in state + begin + data errorValue, @ModelError + foreach errorValue in errorPair.Value.Errors + begin + errorText.Add(errorValue.ErrorMessage) + end + end + + mreturn new BadRequestObjectResult(string.Join(%char(13) + %char(10), errorText)) + endmethod + + endclass + +endnamespace From ab8e2b0b1cf90722421f0cd3ae254bf4ec74d1e3 Mon Sep 17 00:00:00 2001 From: hippiehunter Date: Thu, 19 Dec 2019 09:57:49 -0800 Subject: [PATCH 2/2] updated controller template and regenerated controllers for validation changes --- Services.Controllers/CustomerNotesController.dbl | 13 +++++++------ Services.Controllers/CustomersController.dbl | 13 +++++++------ Services.Controllers/ItemsController.dbl | 13 +++++++------ Services.Controllers/OrderItemsController.dbl | 13 +++++++------ Services.Controllers/OrdersController.dbl | 13 +++++++------ Services.Controllers/VendorsController.dbl | 13 +++++++------ Templates/ODataController.tpl | 13 +++++++------ 7 files changed, 49 insertions(+), 42 deletions(-) diff --git a/Services.Controllers/CustomerNotesController.dbl b/Services.Controllers/CustomerNotesController.dbl index ca93c84b..e0d3aa7c 100644 --- a/Services.Controllers/CustomerNotesController.dbl +++ b/Services.Controllers/CustomerNotesController.dbl @@ -21,6 +21,7 @@ import System.ComponentModel.DataAnnotations import Harmony.Core.EF.Extensions import Harmony.Core.Interface import Harmony.OData +import Harmony.AspNetCore import Newtonsoft.Json import Services.Models @@ -129,7 +130,7 @@ namespace Services.Controllers ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Get the next available primary key value disposable data keyFactory = (@IPrimaryKeyFactory)_ServiceProvider.GetService(^typeof(IPrimaryKeyFactory)) @@ -144,7 +145,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -166,7 +167,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Ensure that the key values in the URI win over any data that may be in the model object aCustomerNote.CustomerNumber = aCustomerNumber @@ -195,7 +196,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -215,7 +216,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Patch the existing customerNote try @@ -244,7 +245,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry diff --git a/Services.Controllers/CustomersController.dbl b/Services.Controllers/CustomersController.dbl index 44f56515..b1cc220b 100644 --- a/Services.Controllers/CustomersController.dbl +++ b/Services.Controllers/CustomersController.dbl @@ -21,6 +21,7 @@ import System.ComponentModel.DataAnnotations import Harmony.Core.EF.Extensions import Harmony.Core.Interface import Harmony.OData +import Harmony.AspNetCore import Newtonsoft.Json import Services.Models @@ -360,7 +361,7 @@ namespace Services.Controllers ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Get the next available primary key value disposable data keyFactory = (@IPrimaryKeyFactory)_ServiceProvider.GetService(^typeof(IPrimaryKeyFactory)) @@ -375,7 +376,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -397,7 +398,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Ensure that the key values in the URI win over any data that may be in the model object aCustomer.CustomerNumber = aCustomerNumber @@ -426,7 +427,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -446,7 +447,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Patch the existing customer try @@ -475,7 +476,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry diff --git a/Services.Controllers/ItemsController.dbl b/Services.Controllers/ItemsController.dbl index 8ac0cc82..97b9daf9 100644 --- a/Services.Controllers/ItemsController.dbl +++ b/Services.Controllers/ItemsController.dbl @@ -21,6 +21,7 @@ import System.ComponentModel.DataAnnotations import Harmony.Core.EF.Extensions import Harmony.Core.Interface import Harmony.OData +import Harmony.AspNetCore import Newtonsoft.Json import Services.Models @@ -521,7 +522,7 @@ namespace Services.Controllers ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Get the next available primary key value disposable data keyFactory = (@IPrimaryKeyFactory)_ServiceProvider.GetService(^typeof(IPrimaryKeyFactory)) @@ -536,7 +537,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -558,7 +559,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Ensure that the key values in the URI win over any data that may be in the model object aItem.ItemNumber = aItemNumber @@ -587,7 +588,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -607,7 +608,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Patch the existing item try @@ -636,7 +637,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry diff --git a/Services.Controllers/OrderItemsController.dbl b/Services.Controllers/OrderItemsController.dbl index 77a01c42..5d1d26c7 100644 --- a/Services.Controllers/OrderItemsController.dbl +++ b/Services.Controllers/OrderItemsController.dbl @@ -21,6 +21,7 @@ import System.ComponentModel.DataAnnotations import Harmony.Core.EF.Extensions import Harmony.Core.Interface import Harmony.OData +import Harmony.AspNetCore import Newtonsoft.Json import Services.Models @@ -254,7 +255,7 @@ namespace Services.Controllers ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Get the next available primary key value disposable data keyFactory = (@IPrimaryKeyFactory)_ServiceProvider.GetService(^typeof(IPrimaryKeyFactory)) @@ -269,7 +270,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -294,7 +295,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Ensure that the key values in the URI win over any data that may be in the model object aOrderItem.OrderNumber = aOrderNumber @@ -324,7 +325,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -347,7 +348,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Patch the existing orderItem try @@ -376,7 +377,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry diff --git a/Services.Controllers/OrdersController.dbl b/Services.Controllers/OrdersController.dbl index b47a0fa9..24e6b1bc 100644 --- a/Services.Controllers/OrdersController.dbl +++ b/Services.Controllers/OrdersController.dbl @@ -21,6 +21,7 @@ import System.ComponentModel.DataAnnotations import Harmony.Core.EF.Extensions import Harmony.Core.Interface import Harmony.OData +import Harmony.AspNetCore import Newtonsoft.Json import Services.Models @@ -252,7 +253,7 @@ namespace Services.Controllers ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Get the next available primary key value disposable data keyFactory = (@IPrimaryKeyFactory)_ServiceProvider.GetService(^typeof(IPrimaryKeyFactory)) @@ -267,7 +268,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -289,7 +290,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Ensure that the key values in the URI win over any data that may be in the model object aOrder.OrderNumber = aOrderNumber @@ -318,7 +319,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -338,7 +339,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Patch the existing order try @@ -367,7 +368,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry diff --git a/Services.Controllers/VendorsController.dbl b/Services.Controllers/VendorsController.dbl index 9c63b7f2..691b5d20 100644 --- a/Services.Controllers/VendorsController.dbl +++ b/Services.Controllers/VendorsController.dbl @@ -21,6 +21,7 @@ import System.ComponentModel.DataAnnotations import Harmony.Core.EF.Extensions import Harmony.Core.Interface import Harmony.OData +import Harmony.AspNetCore import Newtonsoft.Json import Services.Models @@ -306,7 +307,7 @@ namespace Services.Controllers ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Get the next available primary key value disposable data keyFactory = (@IPrimaryKeyFactory)_ServiceProvider.GetService(^typeof(IPrimaryKeyFactory)) @@ -321,7 +322,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -343,7 +344,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Ensure that the key values in the URI win over any data that may be in the model object aVendor.VendorNumber = aVendorNumber @@ -372,7 +373,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -392,7 +393,7 @@ namespace Services.Controllers proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Patch the existing vendor try @@ -421,7 +422,7 @@ namespace Services.Controllers catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry diff --git a/Templates/ODataController.tpl b/Templates/ODataController.tpl index eba644b1..077e7a26 100644 --- a/Templates/ODataController.tpl +++ b/Templates/ODataController.tpl @@ -61,6 +61,7 @@ import System.ComponentModel.DataAnnotations import Harmony.Core.EF.Extensions import Harmony.Core.Interface import Harmony.OData +import Harmony.AspNetCore import Newtonsoft.Json import @@ -421,7 +422,7 @@ namespace ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Get the next available primary key value disposable data keyFactory = (@IPrimaryKeyFactory)_ServiceProvider.GetService(^typeof(IPrimaryKeyFactory)) @@ -436,7 +437,7 @@ namespace catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -499,7 +500,7 @@ namespace proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Ensure that the key values in the URI win over any data that may be in the model object @@ -541,7 +542,7 @@ namespace catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry @@ -602,7 +603,7 @@ namespace proc ;; Validate inbound data if (!ModelState.IsValid) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) ;;Patch the existing try @@ -631,7 +632,7 @@ namespace catch (e, @ValidationException) begin ModelState.AddModelError("RelationValidation",e.Message) - mreturn BadRequest(ModelState) + mreturn ValidationHelper.ReturnValidationError(ModelState) end endtry