HTTP-заголовок ответа, формат для «Expires» - PullRequest
17 голосов
/ 07 декабря 2011

Я устанавливаю это в C # с этой строкой:

WebOperationContext.Current.OutgoingResponse.Headers.Add(HttpResponseHeader.Expires, DateTime.Now.AddSeconds(10).ToString());

Теперь я знаю, что формат отключен, так как ожидается следующее: Вт, 06 декабря 2011 20:24:15 GMT

Есть ли в .NET класс, реализующий IFormatProvider, который я мог бы использовать здесь? Или мне нужно будет создать свой собственный?

Ответы [ 4 ]

33 голосов
/ 13 июня 2013

Я использую DateTime.UtcNow.AddDays(30).ToString("R")

С MSDN :

Спецификатор стандартного формата "R" или "r" представляет собой пользовательский формат даты и временистрока, которая определяется свойством DateTimeFormatInfo.RFC1123Pattern .Шаблон отражает определенный стандарт, а свойство доступно только для чтения.Следовательно, оно всегда одинаково, независимо от используемой культуры или поставщика формата.Строка пользовательского формата: «ддд, дд ммм гггг чч»: «мм»: «сс« GMT »».Когда используется этот стандартный спецификатор формата, операция форматирования или синтаксического анализа всегда использует инвариантную культуру

13 голосов
/ 28 февраля 2012

Вы можете использовать Пользовательские строки формата даты и времени .

Вт, 06 дек. 2011 20:24:15 GMT

Генерироватьвышеуказанный формат примерно так:

DateTime.Now.AddDays(30).ToUniversalTime()
    .ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'");
2 голосов
/ 08 марта 2014

Вам не нужно передавать строку и устанавливать заголовок. Все, что вам нужно, это установить свойство LastModified:

WebOperationContext.Current.OutgoingResponse.LastModified = DateTime.Now; // DataTime.UtcNow;

Вам даже не нужно беспокоиться о времени UTC, оно обрабатывает это за вас.

0 голосов
/ 07 декабря 2011

В итоге я создал это:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WcfService1
{
    public static class HttpExpiresFormat
    {

        private enum Month
        {
            Jan = 1, Feb = 2, Mar = 3, Apr = 4, May = 5, Jun = 6, Jul = 7, Aug = 8, Sept = 9, Oct = 10, Nov = 11, Dec = 12
        }


        public static string HttpExpireDate(double secondsToAdd)
        {
            DateTime dateTime = DateTime.Now;

            string dayOfWeek = ConvertDayToSmall(dateTime.DayOfWeek.ToString());
            string day = dateTime.Day < 10 ? "0" + dateTime.Day.ToString() : dateTime.Day.ToString();
            string month = ((Month)dateTime.Month).ToString();
            string year = dateTime.Year.ToString();
            char[] trim = new char[] { '.' };
            string substring = dateTime.AddHours(5).AddSeconds(secondsToAdd).TimeOfDay.ToString();
            string time = substring.Remove(substring.LastIndexOf('.')) + " GMT";

            return string.Format("{0}, {1} {2} {3} {4}", dayOfWeek, day, month, year, time);
        }

        private static string ConvertDayToSmall(string day)
        {
            switch (day)
            {
                case "Monday":
                    return "Mon";
                case "Tuesday":
                    return "Tue";
                case "Wednesday":
                    return "Wed";
                case "Thursday":
                    return "Thu";
                case "Friday":
                    return "Fri";
                default:
                    return null;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...