在DelegatingHandler中访问cookie

时间:2018-07-30 19:32:41

标签: c# asp.net asp.net-web-api

我的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。

0 个答案:

没有答案