43 lines
1.4 KiB
C#
43 lines
1.4 KiB
C#
namespace EnVisage.Code.ModelBinders
|
|
{
|
|
using Newtonsoft.Json.Linq;
|
|
using NLog;
|
|
using System;
|
|
using System.IO;
|
|
using System.Web.Mvc;
|
|
|
|
public class JsonModelBinderBase<T> : IModelBinder where T : class, new()
|
|
{
|
|
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
|
|
{
|
|
try
|
|
{
|
|
// check if it is json content is passed
|
|
if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
|
|
return null;
|
|
|
|
var stream = controllerContext.HttpContext.Request.InputStream;
|
|
if (stream == null)
|
|
return null;
|
|
|
|
stream.Position = 0;
|
|
using (var reader = new StreamReader(stream))
|
|
{
|
|
var json = reader.ReadToEnd();
|
|
var modelName = bindingContext.ModelName;
|
|
var modelContent = JObject.Parse(json)[modelName];
|
|
var model = modelContent.ToObject<T>();
|
|
|
|
return model;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
var logger = LogManager.GetCurrentClassLogger();
|
|
logger?.Fatal(ex);
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
} |