Acını hissediyorum ... yine başka bir tarih ve saat biçimi ... tam da ihtiyacın olan şey!
Web Api 2'yi kullanarak, parametreleri belirtmek için rota niteliklerini kullanabilirsiniz.
Bu nedenle, sınıfınız ve yönteminizdeki özniteliklerle sorun yaşadığınız bu utc biçimini kullanarak bir REST URL'si kodlayabilirsiniz (görünüşe göre ISO8601, muhtemelen startDate.toISOString () kullanmaya geldi)
[Route(@"daterange/{startDate:regex(^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$)}/{endDate:regex(^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$)}")]
[HttpGet]
public IEnumerable<MyRecordType> GetByDateRange(DateTime startDate, DateTime endDate)
.... AMA, bu bir tarihle (başlangıçTarihi) çalışmasına rağmen, bazı nedenlerden dolayı, bitişTarihi bu formatta olduğunda çalışmaz ... saatlerce hata ayıklanır, yalnızca ipucu istisnadır, kolondan hoşlanmadığını söyler ":" (hatta web.config şu şekilde ayarlanmış olsa da:
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" requestPathInvalidCharacters="" />
</system.web>
Öyleyse, başka bir tarih formatı yapalım (ISO tarih formatı için çoklu dolgudan alınmıştır) ve onu Javascript tarihine ekleyelim (kısalık için, yalnızca dakikalara kadar dönüştürün):
if (!Date.prototype.toUTCDateTimeDigits) {
(function () {
function pad(number) {
if (number < 10) {
return '0' + number;
}
return number;
}
Date.prototype.toUTCDateTimeDigits = function () {
return this.getUTCFullYear() +
pad(this.getUTCMonth() + 1) +
pad(this.getUTCDate()) +
'T' +
pad(this.getUTCHours()) +
pad(this.getUTCMinutes()) +
'Z';
};
}());
}
Ardından tarihleri Web API 2 yöntemine gönderdiğinizde, bunları dizeden bugüne dönüştürebilirsiniz:
[RoutePrefix("api/myrecordtype")]
public class MyRecordTypeController : ApiController
{
[Route(@"daterange/{startDateString}/{endDateString}")]
[HttpGet]
public IEnumerable<MyRecordType> GetByDateRange([FromUri]string startDateString, [FromUri]string endDateString)
{
var startDate = BuildDateTimeFromYAFormat(startDateString);
var endDate = BuildDateTimeFromYAFormat(endDateString);
...
}
private DateTime BuildDateTimeFromYAFormat(string dateString)
{
Regex r = new Regex(@"^\d{4}\d{2}\d{2}T\d{2}\d{2}Z$");
if (!r.IsMatch(dateString))
{
throw new FormatException(
string.Format("{0} is not the correct format. Should be yyyyMMddThhmmZ", dateString));
}
DateTime dt = DateTime.ParseExact(dateString, "yyyyMMddThhmmZ", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
return dt;
}
yani url
http://domain/api/myrecordtype/daterange/20140302T0003Z/20140302T1603Z
Hanselman burada bazı ilgili bilgiler veriyor:
http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx
http://domain/api/controller/action/2012-12-31T22%3A00%3A00.000Z