Web API ModelBinding From URI

℡╲_俬逩灬. 提交于 2019-12-04 01:22:27

Pretty surprising too :)

My initial doubt was this line:

 GlobalConfiguration.Configuration.BindParameter(typeof(DateTime), new CurrentCultureDateTimeAPI());

MSDN says GlobalConfiguration => GlobalConfiguration provides a global System.Web.HTTP.HttpConfiguration for ASP.NET application.

But for weird reasons this does not seem to work with this particular scenario.

So,

Just add this line inside the static class WebApiConfig

 config.BindParameter(typeof(DateTime), new CurrentCultureDateTimeAPI());

so that your WebAPIConfig file looks like:

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "web/{controller}/{action}/{datetime}",
                defaults: new { controller = "API", datetime = RouteParameter.Optional }
            );

            config.BindParameter(typeof(DateTime), new CurrentCultureDateTimeAPI());
        }

And everything works fine because this method is directly invoked by WebAPI framework so for sure your CurrentCultureDateTimeAPI gets registered.

Checked this with your solution and works great.

Note: (From the comments) You can still support Attribute Routing and you need not comment out this line config.MapHttpAttributeRoutes().

But still, It would be great if somebody can tell why GlobalConfiguration does not work out

It looks like you want to post some data to the server. Try to use FromData and post JSON. FromUri is typically used to fetch some data. Use WebAPI's conventions and allow it to work for you.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!