我想在ASP.Net Web API中创建一个自定义模型绑定器.有关如何从头开始执行此操作的大量资源,但我想利用现有功能.
我在codeplex中查看了源代码,可以在那里看到大量的模型绑定器,但大多数是密封的......即使这样,我也无法确定在哪种情况下使用哪一个.
这是我的api方法标题:
public async Task<HttpResponseMessage> Post(long appId, [FromBody]Field field)
Run Code Online (Sandbox Code Playgroud)
我想要做的是基本上在填充所有基本属性后拦截模型绑定器,然后根据我将在客户端设置的http请求标头设置一些额外的值.
正如我所说,我很乐意创建自定义模型绑定器和模型绑定器并将它们连接起来,我遇到问题的是试图重用现有的功能.
谢谢,皮特
我已全局明确配置我的MVC4应用程序以使用JSON.NET序列化程序.我知道在序列化日期时我可以选择使用ISO标准日期或旧的Microsoft日期格式.
但是我如何输出我自己的自定义dateTime格式字符串,如:"dd/MM/yyyy hh:mm".
我在插入Json.NET作为默认的序列化程序时可以在MVC3中执行此操作,但似乎无法在MVC4中执行此操作.
到目前为止我在application_start中做过:
var settings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
JsonSerializerSettings jSettings = new Newtonsoft.Json.JsonSerializerSettings()
{
Formatting = Formatting.Indented,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
};
jSettings.Converters.Add(new MyDateTimeConvertor() );
settings = jSettings;
Run Code Online (Sandbox Code Playgroud)
和我试图暗示的自定义转换器是这样的:
public class MyDateTimeConvertor : DateTimeConverterBase
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return DateTime.Parse(reader.Value.ToString());
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(((DateTime)value).ToString("dd/MM/yyyy hh:mm"));
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激 :)
我有以下行动签名
[ValidateInput(false)]
public HttpResponseMessage PostParam(Param param)
Run Code Online (Sandbox Code Playgroud)
Param看起来像这样:
public class Param {
public int Id { get; set;}
public string Name { get; set; }
public string Choices { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这就是故障 - 电线上的内容是这样的
{
Id: 2,
Name: "blah",
Choices: [
{
foo: "bar"
},
{
blah: "blo"
something: 123
}
]
}
Run Code Online (Sandbox Code Playgroud)
我不希望"选择"反序列化 - 我希望它存储为字符串(是的,我理解安全隐患).可以理解,我收到一个错误,因为默认的绑定器不知道这个.
现在使用Asp Mvc创建一个特定的ModelBinder会相当简单.ID
Application_Start使用中设置活页夹Binders.Add看起来像Web Api这是一个不同的过程 - System.Web.DefaultModelBinder没有任何要覆盖的东西,我无法使用它Binders.Add.我试过环顾四周但却找不到如何实际做我想做的事情.这更加复杂,因为显然ModelBinders api在Beta和RTM上发生了相当大的变化,因此有很多过时的信息.