我在 ASP .NET MVC 4 RC 中使用 Web API,并且我有一个方法可以使用具有可为空的 DateTime 属性的复杂对象。我希望从查询字符串中读取输入的值,所以我有这样的东西:
public class MyCriteria
{
public int? ID { get; set; }
public DateTime? Date { get; set; }
}
[HttpGet]
public IEnumerable<MyResult> Search([FromUri]MyCriteria criteria)
{
// Do stuff here.
}
如果我在查询字符串中传递标准日期格式,例如 2012 年 1 月 15 日,这将很有效:
http://mysite/Search?ID=1&Date=01/15/2012
但是,我想为 DateTime 指定一个自定义格式(可能是 MMddyyyy)......例如:
http://mysite/Search?ID=1&Date=01152012
编辑:
我尝试应用自定义模型绑定器,但我没有任何运气将它仅应用于 DateTime 对象。我试过的 ModelBinderProvider 看起来像这样:
public class DateTimeModelBinderProvider : ModelBinderProvider
{
public override IModelBinder GetBinder(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
if (bindingContext.ModelType == typeof(DateTime) || bindingContext.ModelType == typeof(DateTime?))
{
return new DateTimeModelBinder();
}
return null;
}
}
// In the Global.asax
GlobalConfiguration.Configuration.Services.Add(typeof(ModelBinderProvider), new DateTimeModelBinderProvider());
新的模型绑定器提供程序被创建,但GetBinder
只被调用一次(对于复杂的模型参数,而不是模型中的每个属性)。这是有道理的,但我想找到一种方法让它使用我DateTimeModelBinder
的 DateTime 属性,同时对非 DateTime 属性使用默认绑定。有没有办法覆盖默认值ModelBinder
并指定每个属性的绑定方式?
谢谢!!!