gpt4 book ai didi

c# - DateTime 作为 WCF REST 服务的参数

转载 作者:行者123 更新时间:2023-11-30 16:28:15 25 4
gpt4 key购买 nike

我有一个将 DateTime 作为参数的 Web 服务。如果用户传递的值格式不正确,.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);
}

我在这里遗漏了什么吗?似乎应该有一种更简洁的方法来执行此操作。

最佳答案

异常是预期的结果,回复:传递的参数不是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);
}

关于c# - DateTime 作为 WCF REST 服务的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com