DateTime в качестве параметра для службы WCF REST - PullRequest
3 голосов
/ 31 августа 2011

У меня есть веб-сервис, который принимает DateTime в качестве параметра.Если пользователь передает значение, которое имеет неправильный формат, .NET выдает исключение до того, как оно перейдет в мою функцию Service, и поэтому я не могу отформатировать какой-нибудь приятный 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 Ответ

3 голосов
/ 31 августа 2011

Исключением является ожидаемый результат, 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...