Więc mam zwyczaj modelu Binder wdrożony DateTime
typu i zarejestrować go jak poniżej:Web API ModelBinding Od URI
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
GlobalConfiguration.Configuration.BindParameter(typeof(DateTime), new CurrentCultureDateTimeAPI());
}
a potem mam setup 2 akcje przykładowych aby sprawdzić, czy mój zwyczaj modelu wiązania odbywa :
[HttpGet]
public void BindDateTime([FromUri]DateTime datetime)
{
//http://localhost:26171/web/api/BindDateTime?datetime=09/12/2014
}
[HttpGet]
public void BindModel([FromUri]User user)
{
//http://localhost:26171/web/api/BindModel?Name=ibrahim&JoinDate=09/12/2014
}
Kiedy biegnę i powoływać się zarówno działania z wymienionych adresów URL, user
„s JoinDate
nieruchomość zostaje związany z powodzeniem przy użyciu niestandardowego spoiwo i skonfigurowany ale BindDateTime
” sParametrnie zostanie powiązany za pomocą niestandardowego modułu wiążącego.
Podałem już w config, że wszystkie DateTime
powinny używać mojego niestandardowego segregatora, a następnie dlaczego obojętność? Sugestie są wysoko cenione.
CurrentCultureDateTimeAPI.cs:
public class CurrentCultureDateTimeAPI: IModelBinder
{
public bool BindModel(HttpActionContext actionContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var date = value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture);
bindingContext.Model = date;
return true;
}
}
UWAGA: Jeśli używam [FromUri(Binder=typeof(CurrentCultureDateTimeAPI))]DateTime datetime
to działa zgodnie z oczekiwaniami, ale potem znowu, dlaczego?
Być może to dlatego, że jesteś ustawienie [FromUri] atrybut - API internetowa korzysta formatek zamiast modelu wiążące, więc niestandardowy segregator nie jest używany.Spróbuj usunąć atrybut [FromUri] w metodzie BindDateTime. –
@IlyaLuzyanin Nie. To nie działa. – lbrahim
Masz rację, [FromUri] nie ma z tym nic wspólnego. Próbowałem odtworzyć twój scenariusz - wszystko działa dobrze, mój niestandardowy model jest nazywany w obu metodach. Czy możesz podać kod CurrentCultureDateTimeAPI? –