我正在尝试在调用其他 Web 服务的 ASP.NET 应用程序中进行一些 cookie 管理。我遇到了只能在某些环境中重现的错误。我的问题是:
- 生产和开发之间的差异是否足以导致此问题?
- 我怎样才能弄清楚生产/开发之间有什么不同?
- 我可以做些什么来解决这个问题?
以下是我用来重现问题的详细信息。我看到的错误是:
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 中修复?