আমি আপনার ব্যথা অনুভব করি ... আরও একটি তারিখের সময়ের ফর্ম্যাট ... ঠিক আপনার যা প্রয়োজন!
ওয়েব এপিআই 2 ব্যবহার করে আপনি প্যারামিটারগুলি নির্দিষ্ট করতে রুট বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন।
সুতরাং আপনার শ্রেণীর বৈশিষ্ট্য এবং আপনার পদ্ধতির সাথে আপনি এই ইউটিসি ফর্ম্যাটটি ব্যবহার করে একটি আরআরএল ইউআরএল কোড আপ করতে পারেন যা আপনার সাথে সমস্যা হচ্ছে (স্পষ্টতই এর আইএসও 8601, সম্ভবত স্টার্টডেট.টোআইএসএসটিং ()) ব্যবহার করে এসে পৌঁছেছে
[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)
.... তবে যদিও এটি এক তারিখের সাথে (স্টার্টডেট) কাজ করে, কোনও কারণে এটি শেষ হয় না যখন শেষ তারিখটি এই ফর্ম্যাটে থাকে ... কয়েক ঘন্টা ডিবাগ করা হয়, কেবল ক্লু ব্যতিক্রম বলে যে এটি কোলনের মতো করে না ":" (এমনকি যদিও ওয়েবকনফিগটি এতে সেট করা রয়েছে:
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" requestPathInvalidCharacters="" />
</system.web>
সুতরাং, আসুন অন্য তারিখের ফর্ম্যাটটি তৈরি করুন (আইএসও তারিখের ফর্ম্যাটের জন্য পলিফিল থেকে নেওয়া) এবং এটি জাভাস্ক্রিপ্টের তারিখে যুক্ত করুন (ব্রেভিটির জন্য, কেবল কয়েক মিনিটের মধ্যে রূপান্তর করুন):
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';
};
}());
}
তারপরে আপনি যখন ওয়েব এপিআই 2 পদ্ধতিতে তারিখগুলি প্রেরণ করেন, আপনি সেগুলি স্ট্রিং থেকে তারিখে রূপান্তর করতে পারেন:
[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;
}
ইউআরএল হবে
http://domain/api/myrecordtype/daterange/20140302T0003Z/20140302T1603Z
হ্যানসেলম্যান এখানে কিছু সম্পর্কিত তথ্য দেয়:
http://www.hanselman.com/blog/OnNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx
http://domain/api/controller/action/2012-12-31T22%3A00%3A00.000Z