Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将WebApi路由参数中的标记绑定到DateTime_C#_Rest_Datetime_Asp.net Web Api_Model Binding - Fatal编程技术网

C# 将WebApi路由参数中的标记绑定到DateTime

C# 将WebApi路由参数中的标记绑定到DateTime,c#,rest,datetime,asp.net-web-api,model-binding,C#,Rest,Datetime,Asp.net Web Api,Model Binding,我的DateTime对象需要毫秒精度,因此我正在将刻度从Windows服务发送到WebApi。这是我对api的调用,最后一个参数是datetime v1/Product/2/1/1000/636149434774700000 在Api上,请求命中的控制器如下所示: [Route("api/v1/Product/{site}/{start?}/{pageSize?}/{from?}")] public IHttpActionResult Product(Site site, int start =

我的DateTime对象需要毫秒精度,因此我正在将刻度从Windows服务发送到WebApi。这是我对api的调用,最后一个参数是datetime

v1/Product/2/1/1000/636149434774700000

在Api上,请求命中的控制器如下所示:

[Route("api/v1/Product/{site}/{start?}/{pageSize?}/{from?}")]
public IHttpActionResult Product(Site site, int start = 1, int pageSize = 100, DateTime? fromLastUpdated = null)

默认模型绑定器无法将记号绑定到DateTime参数。任何提示都将不胜感激。

请独立使用上次更新的
长时间

[Route("api/v1/Product/{site}/{start?}/{pageSize?}/{from?}")]
public IHttpActionResult Product(Site site, int start = 1, int pageSize = 100, long? fromLastUpdated = null)
{
    if (fromLastUpdated.HasValue)
    {
        var ticks = fromLastUpdated.Value;
        var time = new TimeSpan(fromLastUpdated);
        var dateTime = new DateTime() + time;
        // ...
    }
    return ...
}
  • 您可以通过以下路径调用它v1/Product/2/1/1000/2016-11-17T01:37:57.4700000。模型绑定将正常工作

  • 也可以定义自定义模型绑定器:

    public class DateTimeModelBinder : System.Web.Http.ModelBinding.IModelBinder
    {
        public bool BindModel(HttpActionContext actionContext, System.Web.Http.ModelBinding.ModelBindingContext bindingContext)
        {
            if (bindingContext.ModelType != typeof(DateTime?)) return false;
    
            long result;
    
            if  (!long.TryParse(actionContext.RequestContext.RouteData.Values["from"].ToString(), out result)) 
                return false;
    
            bindingContext.Model = new DateTime(result);
    
            return bindingContext.ModelState.IsValid;
        }
    }
    
    [System.Web.Http.HttpGet]
    [Route("api/v1/Product/{site}/{start?}/{pageSize?}/{from?}")]
    public IHttpActionResult Product(Site site, 
                                     int start = 1, 
                                     int pageSize = 100,
                                     [System.Web.Http.ModelBinding.ModelBinderAttribute(typeof(DateTimeModelBinder))] DateTime? fromLastUpdated = null)   
    {
        // your code
    }