EfCore.GenericServices.AspNetCore
3.0.0
See the version list below for details.
dotnet add package EfCore.GenericServices.AspNetCore --version 3.0.0
NuGet\Install-Package EfCore.GenericServices.AspNetCore -Version 3.0.0
<PackageReference Include="EfCore.GenericServices.AspNetCore" Version="3.0.0" />
paket add EfCore.GenericServices.AspNetCore --version 3.0.0
#r "nuget: EfCore.GenericServices.AspNetCore, 3.0.0"
// Install EfCore.GenericServices.AspNetCore as a Cake Addin #addin nuget:?package=EfCore.GenericServices.AspNetCore&version=3.0.0 // Install EfCore.GenericServices.AspNetCore as a Cake Tool #tool nuget:?package=EfCore.GenericServices.AspNetCore&version=3.0.0
EfCore.GenericServices.AspNetCore
This library provides converters from EfCore.GenericService and EfCore.GenericBizRunner status results to into two ASP.NET Core formats.
- ASP.NET Core MVC or Razor pages - copy to
ModelState
. - ASP.NET Core Web API - form correct HTTP response.
The library also contains code for that user EfCore.GenericService or EfCore.GenericBizRunner. See information at end of the Readme file.
*NOTE: If you are interested in using EfCore.GenericService or EfCore.GenericBizRunner in Web APIs then see the article "How to write good, testable ASP.NET Core Web API code quickly" for more information.
MIT licence - available on NuGet.
1. ASP.NET Core MVC or Razor pages - copy status to ModelState
The extention method CopyErrorsToModelState
which copy IStatusGeneric
errors into ASP.NET Core's ModelState
.
Useful when working html/razor pages.
There are two forms of the method CopyErrorsToModelState
- they are:
1a. CopyErrorsToModelState
taking a dto
In ASP.NET Core MVC or Razor pages you need to return errors vai the ModelState, which has the property name and the error for that property. However it is important to NOT have a named property that doesn't appear in the class shown on the display, otherwise the error doesn't appear.
Because the Generic libraries can return errors with for properties not found in the display class there is a version of CopyErrorsToModelState
that takes a parameter called displayDto
and it will ensure the name is only set on properties that the displayDto
has in it.
1b. CopyErrorsToModelState
without a dto
If you want all the errors to have the property name left intact then there is another version that doesn't have a displayDto
parameter.
2. ASP.NET Core Web API - forming the correct HTTP response
If you are using ASP.NET Core Web API you need the status codes of the Generic Libraries turned into the correct HTTP response. The CreateResponse
static class contains a series of extension methods to do this for you.
NOTE: See this example Web API controller for examples of using the CreateResponse
extension methods.
There are the following versions for both the GenericService and GenericBizRunner libraries:
IActionResult Response(this IStatusGeneric status)
- this returns the status without any results.IActionResult ResponseWithValidCode(this IStatusGeneric status, int validStatusCode)
- this returns the status without any results, using thevalidStatusCode
if the status has no errors.ActionResult<T> Response<T>(this IStatusGeneric status, T results)
- this returns the status with the results as a json object.ActionResult<T> ResponseWithValidCode<T>(this IStatusGeneric status, T results, int validStatusCode, int nullResultStatusCode = 204)
- this returns the status with the results as a json object, using thevalidStatusCode
if the status has no errors and the result isn't null, or if the result is null it returns thenullResultStatusCode
, which defaults to 204.
Return formats
1. Success, no results
The HTTP status code defaults to 200, but you can change this by using the ResponseWithValidCode
version of the methods. The json sent looks like this:
{
"message": "Successfully deleted a Todo Item"
}
2. Success, with results - result is not null
The HTTP status code defaults to 200, but you can change this by using the ResponseWithValidCode
version of the methods. The json sent looks like this:
{
"message": "Success",
"results": {
"id": 1,
"name": "Create ASP.NET Core API project",
"difficulty": 1
}
}
3. Success, with results where the results is null
The HTTP status code is 204 (NoContent), but you can change this by using the ResponseWithValidCode
version of the method and providing the third parameter, nullResultStatusCode
with the new status code.
The json sent looks like this:
{
"message": "The Todo Item was not found."
}
4. Error
The HTTP status code is 400 (BadRequest). The json sent looks like this:
{
"": [
"Global error message"
],
"MyPropery": [
"The property is required",
"Another error on the same property"
]
}
NOTE: This error format is the one that ASP.NET Core WebAPI when it is set up to validate data on input.
Unit test/Integration test of Web APIs
I have added some extension methods in the class ResponseDecoders that:
- Provides you with the HTTP Status Code in the response.
- Converts Web API responses that were created by the
CreateResponse
extension method into a
GenericServices.IStatusGeneric
type. This allows you to inspect the Status, message, Errors and returned Result.
I have added a section to my article on Web API
that talks about this feature in more detail.
Also do look at IntegrationTestToDoController
for an example of how the ResponseDecoders
extension methods are used.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- EfCore.GenericBizRunner (>= 2.0.1)
- EfCore.GenericServices (>= 1.2.6)
- Microsoft.AspNetCore.Mvc (>= 2.1.1)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on EfCore.GenericServices.AspNetCore:
Package | Downloads |
---|---|
EntityServices
Package Description |
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on EfCore.GenericServices.AspNetCore:
Repository | Stars |
---|---|
JonPSmith/AuthPermissions.AspNetCore
This library provides extra authorization and multi-tenant features to an ASP.NET Core application.
|
|
JonPSmith/PermissionAccessControl2
Version 2 of example application to go with articles on feature and data authorization
|
Version | Downloads | Last updated |
---|---|---|
4.1.1 | 28,339 | 6/19/2020 |
4.1.0 | 6,194 | 3/18/2020 |
4.0.0 | 3,395 | 10/14/2019 |
4.0.0-preview001 | 875 | 2/28/2020 |
3.0.2 | 22,311 | 9/5/2018 |
3.0.1 | 1,568 | 8/31/2018 |
3.0.0 | 1,471 | 8/22/2018 |
2.0.0 | 1,644 | 8/14/2018 |
1.2.1 | 1,602 | 7/30/2018 |
1.2.0 | 1,412 | 7/25/2018 |
1.1.0 | 2,353 | 6/7/2018 |
1.0.0 | 1,604 | 4/12/2018 |
- Breaking change: Changed the returned ActionResult{T} type to fully define the return - makes swagger definition correct
- Breaking change: Now returns 204 on null result to be in line with common practices (was 404)