所以我有一個自定義的模型綁定實現了DateTime
類型,我註冊它象下面這樣:的Web API ModelBinding從URI
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
GlobalConfiguration.Configuration.BindParameter(typeof(DateTime), new CurrentCultureDateTimeAPI());
}
,然後我有安裝2樣的行動,看看我的自定義模型發生結合:
[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
}
當我運行,並從提到的URL調用這兩個動作,user
的JoinDate
財產得到成功使用定製綁定我配置的約束,但BindDateTime
的datetime
參數未使用自定義聯編程序進行綁定。
我已經在配置中指定所有DateTime
應該使用我的自定義綁定,那麼爲什麼冷漠?建議非常感謝。
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;
}
}
注意:如果我使用[FromUri(Binder=typeof(CurrentCultureDateTimeAPI))]DateTime datetime
那麼它將按預期工作,但話又說回來,爲什麼?
可能是因爲你設置一個[FromUri]屬性 - 網頁API使用格式化的,而不是模型綁定,所以你不使用自定義模型聯編程序。嘗試從BindDateTime方法中刪除[FromUri]屬性。 –
@IlyaLuzyanin號不起作用。 – lbrahim
你說得對,[FromUri]與此無關。我試圖重現您的場景 - 一切正常,我的自定義模型聯編程序在兩種方法中都被調用。你能提供CurrentCultureDateTimeAPI代碼嗎? –