HTTP响应标头,“过期”格式

时间:2011-12-06 20:27:36

标签: c# http-headers

我在C#中设置此行:

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

现在我知道格式已关闭,因为它预计如下:星期二,2011年12月6日20:24:15 GMT

在.NET中是否有一个实现IFormatProvider的类我可以在这里利用?或者我需要创建自己的吗?

4 个答案:

答案 0 :(得分:33)

我使用DateTime.UtcNow.AddDays(30).ToString("R")

来自MSDN

  

“R”或“r”标准格式说明符表示由DateTimeFormatInfo.RFC1123Pattern属性定义的自定义日期和时间格式字符串。该模式反映了已定义的标准,并且该属性是只读的。因此,无论使用何种文化或提供格式提供程序,它始终是相同的。自定义格式字符串是“ddd,dd MMM yyyy HH':​​'mm':'ss'GMT'”。使用此标准格式说明符时,格式化或解析操作始终使用不变文化

答案 1 :(得分:13)

您可以使用Custom Date and Time Format Strings

  

2011年12月6日星期二20:24:15 GMT

生成上述格式:

DateTime.Now.AddDays(30).ToUniversalTime()
    .ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'");

答案 2 :(得分:2)

您不需要传递字符串并设置标题。您只需要设置LastModified属性:

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

你甚至不需要传递UTC时间,它会为你处理它。

答案 3 :(得分:-8)

我最终创造了这个:

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;
            }
        }
    }
}