我的Web API(用C#编写)收到的Cookie的格式为:
Method: GET, RequestUri: 'URI', Version: 1.1, Content: System.Web.Http.WebHost.HttpControllerHandler+LazyStreamContent, Headers:
{
...
Cookie: cookie1=0afb1029-be3d-4aba-86a3-5af73a55ce02; cookie2=some.string
...
}
但是在我的C#中,我被迫将cookie行作为字符串处理。
public class HandleAuth : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
var cookies = request.Headers.GetCookies();
if (cookies.Count > 0)
{
Dictionary<string, string> cookieSet = new Dictionary<string, string>();
string userCookie, authCookie;
try
{
cookieSet.Add(cookies[0].ToString().Split(';')[0].Trim().Split('=')[0],
cookies[0].ToString().Split(';')[0].Trim().Split('=')[1]);
cookieSet.Add(cookies[0].ToString().Split(';')[1].Trim().Split('=')[0],
cookies[0].ToString().Split(';')[1].Trim().Split('=')[1]);
}
catch (...)
{
}
if ( cookieSet.TryGetValue("cookie1", out authCookie) &&
cookieSet.TryGetValue("cookie2", out userCookie)
)
{
// do stuff
}
}
// async, etc...
}
}
这真的很臭,并且该域中的其他cookie很快使事情变得混乱。有没有更好的方法来处理DelegatingHandler
中的cookie? this 6+ year old MS doc提供的方法根本不起作用。像
sessionId = cookie[SessionIdToken].Value;
仅拒绝编译或引发异常。
我想念什么?定位到.Net 4.6.1。