Мое приложение OWIN не вызывает привязку моей пользовательской модели

У меня есть некоторые даты, которые приходят в странном формате (дд.ММ.ГГГГ). Это то, как бизнес хочет, чтобы это отображалось. Итак, мне нужна пользовательская модель связующего, чтобы прочитать эту дату. У меня это решение работало нормально, но когда я перешел на использование OWIN, то оно перестало работать. Вот мой код прямо сейчас:

Мой файл запуска OWIN:

    Конфигурация public void (приложение IAppBuilder)
    {
      var config = new HttpConfiguration();
      config.BindParameter(typeof(DateTime?), новый DateTimeWebApiBinder());
      config.BindParameter(typeof(DateTime), новый DateTimeWebApiBinder());  
      app.UseWebApi(конфигурации);
    }

Пользовательская модель Binder

    открытый класс DateTimeWebApiBinder: IModelBinder
    {
      public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
      {
        varcomingDate = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (bindingContext.ModelType == typeof(DateTime) && string.IsNullOrEmpty(comingDate.AttemptedValue)) 
        { 
          вернуть ложь; 
        }
        DateTime parsedDate;
        if (DateTime.TryParseExact(comingDate.AttemptedValue, "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate))
        {
          bindingContext.Model = parsedDate;
          вернуть истину;
        }
        вернуть ложь;
      }
    }

То, что происходит, это связка пользовательской модели не срабатывает. Я подозреваю, что это как-то связано с настройкой OWIN.

1 ответ

Ты можешь попробовать:

ContainerBuilder builder = new ContainerBuilder();
builder.RegisterWebApiModelBinderProvider();
builder.RegisterType<DateTimeWebApiBinder>().AsModelBinderForTypes(typeof(DateTime));


var resolver = new AutofacWebApiDependencyResolver(builder.Build());

var config = new HttpConfiguration
{
   DependencyResolver = resolver
};
app.UseWebApi(config);

Согласно этой статье, вы должны поставить [ModelBinder(typeof(DateTimeWebApiBinder))] по параметру вашего контроллера.

Другие вопросы по тегам