DateTime作为WCF REST服务的参数

时间:2011-08-31 18:00:46

标签: c# wcf rest .net-4.0

我有一个Web服务,它将DateTime作为参数。如果用户传递的格式不正确,.NET会在进入我的服务函数之前抛出异常,因此我无法为客户端格式化一些不错的XML错误响应。

例如:

[WebGet]
public IEnumerable<Statistics> GetStats(DateTime startDate)
{
    //.NET throws exception before I get here
    Statistician stats = new Statistician();
    return ServiceHelper.WebServiceWrapper(startDate, stats.GetCompanyStatistics);
}

我现在的工作(我非常不喜欢)是:

[WebGet]
public IEnumerable<Statistics> GetStats(string startDate)
{
try
{
    DateTime date = Convert.ToDateTime(startDat);
}
catch
{
    throw new WebFaultException<Result>(new Result() { Title = "Error",
    Description = "startDate is not of a valid Date format" },
    System.Net.HttpStatusCode.BadRequest);
}
Statistician stats = new Statistician();
return ServiceHelper.WebServiceWrapper(startDate, stats.GetCompanyStatistics);
}

我在这里缺少什么吗?似乎应该有一种更清洁的方式来做到这一点。

1 个答案:

答案 0 :(得分:3)

异常是预期结果,re:传递的参数不是DateTime类型。如果将数组作为期望int的参数传递,则结果相同。

您为该方法创建另一个签名的解决方案当然是可行的。该方法接受一个字符串作为参数,尝试将该值解析为日期,如果成功,则调用期望DateTime作为参数的方法。

示例

[WebGet]
public IEnumerable<Statistics> GetStats( DateTime startDate )
{
    var stats = new Statistician();
    return ServiceHelper.WebServiceWrapper(startDate, stats.GetCompanyStatistics);
}

[WebGet]
public IEnumerable<Statistics> GetStats( string startDate )
{
  DateTime dt;
  if ( DateTime.TryParse( startDate, out dt) )
  {
    return GetStats( dt );
  }

  throw new WebFaultException<Result>(new Result() { Title = "Error",
    Description = "startDate is not of a valid Date format" },
    System.Net.HttpStatusCode.BadRequest);
}