我有一个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);
}
我在这里缺少什么吗?似乎应该有一种更清洁的方式来做到这一点。
答案 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);
}