12345678910111213141516171819202122232425262728293031323334353637383940 |
- using Microsoft.AspNetCore.Mvc.ModelBinding;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Threading.Tasks;
-
- namespace Teknik.Utilities
- {
- public class FormDataJsonBinder : IModelBinder
- {
- public Task BindModelAsync(ModelBindingContext bindingContext)
- {
- if (bindingContext == null) throw new ArgumentNullException(nameof(bindingContext));
-
- // Fetch the value of the argument by name and set it to the model state
- string fieldName = bindingContext.FieldName;
- var valueProviderResult = bindingContext.ValueProvider.GetValue(fieldName);
- if (valueProviderResult == ValueProviderResult.None) return Task.CompletedTask;
- else bindingContext.ModelState.SetModelValue(fieldName, valueProviderResult);
-
- // Do nothing if the value is null or empty
- string value = valueProviderResult.FirstValue;
- if (string.IsNullOrEmpty(value)) return Task.CompletedTask;
-
- try
- {
- // Deserialize the provided value and set the binding result
- object result = JsonConvert.DeserializeObject(value, bindingContext.ModelType);
- bindingContext.Result = ModelBindingResult.Success(result);
- }
- catch (JsonException)
- {
- bindingContext.Result = ModelBindingResult.Failed();
- }
-
- return Task.CompletedTask;
- }
- }
- }
|