我正在編寫和ASP.NET Core 1應用程序,它有一個Web API控制器,供應商將在其中發佈數據。ASP.NET Core 1(RTM)中的自定義日期時間模型聯編程序
這是Model類的簡化版本,而我將綁定傳入的數據:
public class Lead
{
public int SupplierId { get; set; }
public DateTime Date { get; set; }
}
的問題是,該日期將與德國的格式發佈,例如,30.09.2016
。我不想將應用程序的全球文化設置爲de-DE
,因爲a)我不是德國人,b)其他應用程序將與ISO日期一起工作。
我已經設置爲編寫自定義IModelBinder
,並且因爲它顯然是ASP.NET Core MVC中的必須項,所以它是IModelBinderProvider
。
這裏是我實施IModelBinderProvider
的:
public class GermanDateTimeModelBinderProvider : IModelBinderProvider
{
public IModelBinder GetBinder(ModelBinderProviderContext context)
{
if (context == null)
throw new ArgumentNullException(nameof(context));
if (!context.Metadata.IsComplexType &&
context.Metadata.ModelType == typeof(DateTime))
return new GermanDateTimeBinder();
return null;
}
}
的問題是,我的IModelBinderProvider
只被擊中了Lead
類,即context.Metadata.ModelType == typeof(Lead)
。
我希望模型綁定地看到,我們不是處理一個DateTime
,繼續前進,然後回來的Lead
類的每個屬性。
這顯然不是這種情況,我的自定義IModelBinder
永遠不會被擊中。
我之所以說IModelBinderProvider
似乎是強制性的原因是我沒有發現任何方式直接註冊到MVC管道IModelBinder
;我有註冊代替IModelBinderProvider:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc(options =>
{
options.ModelBinderProviders.Insert(0, new GermanDateTimeModelBinderProvider());
});
}
我怎樣才能獲得ASP.NET MVC的核心我的自定義DateTime
粘合劑適用於Lead
類的Date
財產? 有沒有辦法跳過整個IModelBinderProvider
業務,只使用IModelBinder
?
感謝您的回答,這確實是一個非常好的方法。然而,我們有一個解決方法,使用一個具有'DateTime'字符串插入的DTO,然後我們使用AutoMapper來解析日期。 所以這個問題不是關於如何解決這個問題,而是如何在ASp.NET Core 1 *中實際實現自定義ModelBinder –