aspnetcore mvc binders

This commit is contained in:
David Lebee
2019-02-15 11:08:37 -06:00
parent 581f17f448
commit 6ab2187129
6 changed files with 91 additions and 1 deletions
@@ -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;
}
}
}
@@ -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;
}
}
}
@@ -0,0 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Copyright>Powered Softwares Inc.</Copyright>
<PackageLicenseUrl>https://github.com/PoweredSoft/ObjectStorage/blob/master/LICENSE.md</PackageLicenseUrl>
<PackageProjectUrl>https://github.com/PoweredSoft/ObjectStorage</PackageProjectUrl>
<RepositoryUrl>https://github.com/PoweredSoft/ObjectStorage/PoweredSoft.ObjectStorage.MongoDB.AspNetCore</RepositoryUrl>
<RepositoryType>github</RepositoryType>
<PackageIconUrl>https://secure.gravatar.com/avatar/4e32f73820c16718909a06c2927f1f8b?s=512&amp;r=g&amp;d=retro</PackageIconUrl>
<Version>1.0.0$(VersionSuffix)</Version>
<Product>PoweredSoft.ObjectStorage.MongoDB.AspNetCore</Product>
<Description>Mongo DB Implementation of IObjectStorageClient</Description>
<PackageId>PoweredSoft.ObjectStorage.MongoDB.AspNetCore</PackageId>
<PackageReleaseNotes>N/A</PackageReleaseNotes>
<PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>
<Company>Powered Softwares Inc.</Company>
<Authors>David Lebee</Authors>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.2.2" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.2.0" />
<PackageReference Include="MongoDB.Driver" Version="2.7.3" />
</ItemGroup>
</Project>
@@ -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;
}
}
}