C# .NET CookieException“;Cookie格式错误“;当线程文化不是英语时-仅在某些环境中
我正在尝试在调用其他web服务的ASP.NET应用程序中执行一些cookie管理。我遇到了一个错误,我只能在某些环境中重现。我的问题是:C# .NET CookieException“;Cookie格式错误“;当线程文化不是英语时-仅在某些环境中,c#,asp.net,.net,cookies,currentculture,C#,Asp.net,.net,Cookies,Currentculture,我正在尝试在调用其他web服务的ASP.NET应用程序中执行一些cookie管理。我遇到了一个错误,我只能在某些环境中重现。我的问题是: 生产和发展之间的差异是否足以导致这一问题 我如何找出生产/开发之间的区别 我能做些什么来解决这个问题 下面是我用来重现问题的细节。我看到的错误是: Unhandled Exception: System.Net.CookieException: An error occurred when parsing the Cookie header for Uri
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
此代码在我的开发计算机(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中修复的?我相信问题在于星期几之后的逗号,如图所示:正如@nunzabar指出的,问题在于当前文化在星期几设置逗号的方式。在本例中,安装.NET4.5框架导致问题消失。我没有对代码进行反编译以查看.NET4.0和4.5之间的差异,但在我们安装新版本的框架时,它已被修复
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);
}