function setTimezoneCookie() {
var timezone_cookie = "tz";
// Инвертируем смещение (см. документацию к getTimezoneOffset)
var timezone_offset = (new Date().getTimezoneOffset())*(-1);
//Если нет - создаем
if (!$.cookie(timezone_cookie)) {
// проверка поддержки куков браузером
var isCookiesEnabled = 'isCookiesEnabled';
$.cookie(isCookiesEnabled, true);
if ($.cookie(isCookiesEnabled)) {
// удаляем тестовые куки
$.cookie(isCookiesEnabled, null);
// записываем timezone
$.cookie(timezone_cookie, timezone_offset);
}
}
else {
// Если куки с timezone уже есть, но отличается, то записываем новое значение
var storedOffset = parseInt($.cookie(timezone_cookie));
var currentOffset = timezone_offset;
if (storedOffset !== currentOffset) {
$.cookie(timezone_cookie, timezone_offset);
}
}
}
public class TimezoneHandler : DelegatingHandler
{
static public string TimezoneToken = "tz";
async protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
// Изначально, смещение относительно UTC нулевое
int timezoneOffset = 0;
// Получаем значение временной зоны из cookies
var cookie = request.Headers.GetCookies(TimezoneToken).FirstOrDefault();
if (cookie != null)
{
try
{
timezoneOffset = Int32.Parse(cookie[TimezoneToken].Value);
}
catch (FormatException)
{
// Ошибка в формате временного смещения - выставляем в нулевое
timezoneOffset = 0;
}
}
// Сохраняем временное смещение в свойствах HTTP-запроса
request.Properties[TimezoneToken] = timezoneOffset;
// Продолжаем выполнение HTTP-запроса
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
return response;
}
}
public static void Register(HttpConfiguration config)
{
...
config.MessageHandlers.Add(new TimezoneHandler());
...
}
...
int? tzOffset = Request.Properties[TimezoneHandler.TimezoneToken] as int?;
...
function getHtml() {
$.ajax({
url: 'http://www.test.com',
type: 'GET',
success: function(res) {
var content = $(res.responseText).text();
alert(content);
}
});
}
public class DecimalFormatConverter: JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(decimal) || objectType == typeof(decimal?));
}
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
writer.WriteValue(value);
}
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
if (reader.Value != null)
{
try
{
string replacedValue = reader.Value.ToString().Replace(',', '.');
return decimal.Parse(replacedValue, CultureInfo.InvariantCulture);
}
catch (Exception ex)
{
throw new Exception(
String.Format("Decimal coverting error. Message: {0}.", ex.Message));
}
}
return null;
}
}
...
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new DecimalFormatConverter());
...
<my-dir/>
<my-dir data-my-text="myText" data-my-model="myModel"></my-dir>