From 6ab218712911db8b455f9ca61ee7ed145dd89448 Mon Sep 17 00:00:00 2001 From: David Lebee Date: Fri, 15 Feb 2019 11:08:37 -0600 Subject: [PATCH] aspnetcore mvc binders --- ObjectStorage.sln | 6 ++++ .../ObjectIdModelBinder.cs | 18 ++++++++++++ .../ObjectIdModelBinderProvider.cs | 19 +++++++++++++ ...ft.ObjectStorage.MongoDB.AspNetCore.csproj | 28 +++++++++++++++++++ .../ServiceCollectionExtensions.cs | 18 ++++++++++++ README.md | 3 +- 6 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ObjectIdModelBinder.cs create mode 100644 PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ObjectIdModelBinderProvider.cs create mode 100644 PoweredSoft.ObjectStorage.MongoDB.AspNetCore/PoweredSoft.ObjectStorage.MongoDB.AspNetCore.csproj create mode 100644 PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ServiceCollectionExtensions.cs diff --git a/ObjectStorage.sln b/ObjectStorage.sln index 7d8e6f6..e942487 100644 --- a/ObjectStorage.sln +++ b/ObjectStorage.sln @@ -13,6 +13,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution LICENSE.md = LICENSE.md EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PoweredSoft.ObjectStorage.MongoDB.AspNetCore", "PoweredSoft.ObjectStorage.MongoDB.AspNetCore\PoweredSoft.ObjectStorage.MongoDB.AspNetCore.csproj", "{E69D559E-72F3-47A9-ABE5-D49FD8412DE4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x86 = Debug|x86 @@ -31,5 +33,9 @@ Global {D8CB2E20-7298-4EEB-9694-C54654B1BD1C}.Debug|x86.Build.0 = Debug|Any CPU {D8CB2E20-7298-4EEB-9694-C54654B1BD1C}.Release|x86.ActiveCfg = Release|Any CPU {D8CB2E20-7298-4EEB-9694-C54654B1BD1C}.Release|x86.Build.0 = Release|Any CPU + {E69D559E-72F3-47A9-ABE5-D49FD8412DE4}.Debug|x86.ActiveCfg = Debug|Any CPU + {E69D559E-72F3-47A9-ABE5-D49FD8412DE4}.Debug|x86.Build.0 = Debug|Any CPU + {E69D559E-72F3-47A9-ABE5-D49FD8412DE4}.Release|x86.ActiveCfg = Release|Any CPU + {E69D559E-72F3-47A9-ABE5-D49FD8412DE4}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection EndGlobal diff --git a/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ObjectIdModelBinder.cs b/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ObjectIdModelBinder.cs new file mode 100644 index 0000000..b268d62 --- /dev/null +++ b/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ObjectIdModelBinder.cs @@ -0,0 +1,18 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using MongoDB.Bson; + +namespace PoweredSoft.ObjectStorage.MongoDB.AspNetCore +{ + public class ObjectIdModelBinder : IModelBinder + { + public Task BindModelAsync(ModelBindingContext bindingContext) + { + var result = bindingContext.ValueProvider.GetValue(bindingContext.FieldName); + + bindingContext.Result = ModelBindingResult.Success(new ObjectId(result.FirstValue)); + + return Task.CompletedTask; + } + } +} diff --git a/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ObjectIdModelBinderProvider.cs b/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ObjectIdModelBinderProvider.cs new file mode 100644 index 0000000..922d1b0 --- /dev/null +++ b/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ObjectIdModelBinderProvider.cs @@ -0,0 +1,19 @@ +using System; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using MongoDB.Bson; + +namespace PoweredSoft.ObjectStorage.MongoDB.AspNetCore +{ + public class ObjectIdModelBinderProvider : IModelBinderProvider + { + public IModelBinder GetBinder(ModelBinderProviderContext context) + { + if (context == null) + throw new ArgumentNullException(nameof(context)); + + if (context.Metadata.ModelType == typeof(ObjectId)) + return new ObjectIdModelBinder(); + return null; + } + } +} diff --git a/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/PoweredSoft.ObjectStorage.MongoDB.AspNetCore.csproj b/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/PoweredSoft.ObjectStorage.MongoDB.AspNetCore.csproj new file mode 100644 index 0000000..fe2a533 --- /dev/null +++ b/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/PoweredSoft.ObjectStorage.MongoDB.AspNetCore.csproj @@ -0,0 +1,28 @@ + + + + netstandard2.0 + Powered Softwares Inc. + https://github.com/PoweredSoft/ObjectStorage/blob/master/LICENSE.md + https://github.com/PoweredSoft/ObjectStorage + https://github.com/PoweredSoft/ObjectStorage/PoweredSoft.ObjectStorage.MongoDB.AspNetCore + github + https://secure.gravatar.com/avatar/4e32f73820c16718909a06c2927f1f8b?s=512&r=g&d=retro + 1.0.0$(VersionSuffix) + PoweredSoft.ObjectStorage.MongoDB.AspNetCore + Mongo DB Implementation of IObjectStorageClient + PoweredSoft.ObjectStorage.MongoDB.AspNetCore + N/A + False + Powered Softwares Inc. + David Lebee + + + + + + + + + + diff --git a/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ServiceCollectionExtensions.cs b/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ServiceCollectionExtensions.cs new file mode 100644 index 0000000..ce633c4 --- /dev/null +++ b/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/ServiceCollectionExtensions.cs @@ -0,0 +1,18 @@ +using System; +using Microsoft.Extensions.DependencyInjection; + +namespace PoweredSoft.ObjectStorage.MongoDB.AspNetCore +{ + public static class ServiceCollectionExtensions + { + public static IMvcBuilder AddMongoDBMvcBinders(this IMvcBuilder mvcBuilder) + { + mvcBuilder.AddMvcOptions(options => + { + options.ModelBinderProviders.Insert(0, new ObjectIdModelBinderProvider()); + }); + + return mvcBuilder; + } + } +} diff --git a/README.md b/README.md index 3524afe..c9126cd 100644 --- a/README.md +++ b/README.md @@ -9,4 +9,5 @@ choices. Full Version | NuGet | NuGet Install ------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------: PoweredSoft.ObjectStorage.Core | [![NuGet](https://img.shields.io/nuget/v/PoweredSoft.ObjectStorage.Core.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/PoweredSoft.ObjectStorage.Core/) | ```PM> Install-Package PoweredSoft.ObjectStorage.Core``` -PoweredSoft.ObjectStorage.MongoDB | [![NuGet](https://img.shields.io/nuget/v/PoweredSoft.ObjectStorage.MongoDB.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/PoweredSoft.ObjectStorage.MongoDB/) | ```PM> Install-Package PoweredSoft.ObjectStorage.MongoDB``` \ No newline at end of file +PoweredSoft.ObjectStorage.MongoDB | [![NuGet](https://img.shields.io/nuget/v/PoweredSoft.ObjectStorage.MongoDB.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/PoweredSoft.ObjectStorage.MongoDB/) | ```PM> Install-Package PoweredSoft.ObjectStorage.MongoDB``` +PoweredSoft.ObjectStorage.MongoDB.AspNetCore | [![NuGet](https://img.shields.io/nuget/v/PoweredSoft.ObjectStorage.MongoDB.AspNetCore.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/PoweredSoft.ObjectStorage.MongoDB.AspNetCore/) | ```PM> Install-Package PoweredSoft.ObjectStorage.MongoDB.AspNetCore``` \ No newline at end of file