.NET Cookie格式错误;当线程文化不是英语时-仅在某些环境中

本文关键字:环境 英语 错误 格式 Cookie 文化不 线程 NET | 更新日期: 2023-09-27 18:02:32

我试图在ASP中做一些cookie管理。NET应用程序调用其他web服务。我遇到了一个错误,我只能在某些环境中重现。我的问题是:

  1. 生产和开发之间的差异是否足以导致这个问题?
  2. 我该如何区分制作和开发之间的区别?
  3. 我能做些什么来解决这个问题?

下面是我用来重现问题的细节。我看到的错误是:

Unhandled Exception: System.Net.CookieException: 
An error occurred when parsing the Cookie header for Uri 'http://example.com/'. 
---> System.Net.CookieException: Cookie format error.
   at System.Net.CookieContainer.CookieCutter(Uri uri, String headerName, 
         String setCookieHeader, Boolean isThrow)
   --- End of inner exception stack trace ---
   at System.Net.CookieContainer.CookieCutter(Uri uri, String headerName, 
         String setCookieHeader, Boolean isThrow)
   at System.Net.CookieContainer.SetCookies(Uri uri, String cookieHeader)
   at Program.Main() in c:'Sample'Program.cs:line 21

我创建了一个控制台应用程序,再现了这个问题(相关部分见下文)。完整代码见https://compilr.com/adutton/cookiecutterexample/main.cs

string[] cultures = new[] { "en-US", "es-MX" };
const string cookieHeader = ".ASPXAUTH=SECURITYINFO; domain=.example.com; "
    + "expires=Mon, 06-Mar-2023 18:36:33 GMT; path=/; HttpOnly";
foreach (string culture in cultures)
{
    Console.WriteLine("CookieCutting with culture: " + culture);
    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
    CookieContainer ctr = new CookieContainer();
    // The following line throws an exception
    ctr.SetCookies(new Uri("http://example.com/"), cookieHeader);
}

此代码适用于我的开发机器(Windows 7, x64, . net 4.5.50709),但不适用于生产 (Windows Server 2008 R2 Enterprise, x64, . net 4.0.30319),其中代码抛出es-MX文化异常。

如果我从cookie头中删除日期,异常就会消失,这让我相信这是cookie解析器的本地化问题。也许在。net 4.0 -> 4.5中修复了这个问题?

.NET Cookie格式错误;当线程文化不是英语时-仅在某些环境中

我认为问题出在星期之后的逗号,如下所示:

正如@nunzabar指出的那样,问题在于当前文化在星期中设置逗号的方式。在这种情况下,安装。net 4.5框架会使问题消失。我没有反编译代码来查看。net 4.0和。4.5之间的差异,但当我们安装了新版本的框架时,它被修复了。