필자는 공급자와 데이터를 게시 할 웹 API 컨트롤러가있는 ASP.NET Core 1 응용 프로그램을 작성하고 있습니다.ASP.NET Core 1 (RTM)의 Custom DateTime 모델 바인더
이것은 내가 들어오는 데이터를 바인딩 할 수있는 모델 클래스의 단순화 된 버전은 다음과 같습니다
public class Lead
{
public int SupplierId { get; set; }
public DateTime Date { get; set; }
}
문제는 날짜 인스턴스 30.09.2016
를 들어, 독일어 서식 게시 될 것입니다. a) 나는 독일어가 아니므로 b) 응용 프로그램의 나머지 부분은 ISO 날짜와 함께 작동하므로 응용 프로그램의 글로벌 문화를 de-DE
으로 설정하고 싶지 않습니다.
사용자 정의 IModelBinder
을 작성했으며, ASP.NET Core MVC에서 명시 적으로 적용해야하므로 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
만, 즉, context.Metadata.ModelType == typeof(Lead)
Lead
클래스에 명중되고 있다는 것입니다 :
다음은 IModelBinderProvider
내 구현입니다.
나는 모델 바인더에 이동, 우리는 DateTime
취급하지 않는 것을 볼 기대하고 는 다시 Lead
클래스의 모든 속성에 대해 제공됩니다.
이것은 분명히 사실이 아니며, 내 사용자 정의 IModelBinder
에 결코 부딪치지 않습니다.
내가 IModelBinderProvider
인 것처럼 보이는 이유는 MVC 파이프 라인에 IModelBinder
을 직접 등록 할 방법이 없다는 것을 알았 기 때문입니다.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc(options =>
{
options.ModelBinderProviders.Insert(0, new GermanDateTimeModelBinderProvider());
});
}
가 어떻게 ASP.NET 코어 MVC는 Lead
클래스의 Date
속성에 내 사용자 지정 DateTime
바인더를 적용받을 수 있습니다 내가 대신 IModelBinderProvider를 등록이 ? IModelBinderProvider
전체를 건너 뛰고 IModelBinder
만 사용하는 방법이 있습니까?
답변을 주셔서 감사합니다. 실제로 매우 좋은 접근 방법입니다. 그러나 우리는'DateTime'의'string' insetad를 가진 DTO로 해결 방법을 가지고 있습니다. 그리고 우리는 AutoMapper를 사용하여 날짜를 파싱합니다. 그래서이 문제는 내가 문제를 해결할 수있는 방법에 관한 것이 아니라 * 실제로 ASp.NET Core 1 *에서 사용자 정의 ModelBinder를 구현하는 방법입니다. –