使用HttpClient和cookie对OWIN

时间:2016-08-15 15:44:10

标签: c# .net dotnet-httpclient

我需要连接到库中的服务器,以便我可以使用一些内部API功能。

此服务器使用OWIN进行身份验证,我需要使用cookie来帮助进行身份验证。我已经看了很多关于如何使用HttpClient和cookie的例子,但我显然仍然做错了。

我设置了这个小测试应用程序,尝试它,但我继续得到一个Interal Server错误:

  

{StatusCode:500,ReasonPhrase:'内部服务器错误',版本:1.1,   内容:System.Net.Http.StreamContent,Headers:{   内容安全政策:script-src' unsafe-eval' '自'   cdnjs.cloudflare.com X-SourceFiles:   =?UTF-8?B?kjsdf83r3748ryefhkr4389r =?= X-UA兼容:IE =边缘X-Frame-选项:SAMEORIGIN日期:星期一,2016年8月15日14:37:28 GMT   服务器:Microsoft-IIS / 10.0内容长度:3312内容类型:   应用/ JSON;字符集= UTF-8}}

这是我的小测试应用程序:

   static void Main(string[] args)
    {
        Console.WriteLine("Connecting to Spock Library System...");
        GenerateBookLoan();
    }

    private static void GenerateBookLoan()
    {

        DateTime dueDate_Begin = DateTime.Today;
        DateTime dueDate_End = DateTime.Today.AddDays(13);

        var dueDate_Range = new Dictionary<string, string>
                {
                    {"BeginDueDate", dueDate_Begin.ToString()},
                    {"EndDueDate", dueDate_End.ToString()}
                };

        var json = JsonConvert.SerializeObject(dueDate_Range);

        var credentials = new NetworkCredential("library_API", "xxxxxxxxxxxxxx");

        var handler = new HttpClientHandler { Credentials = credentials, UseCookies = true };
        var cookies = new CookieContainer();
        handler.CookieContainer = cookies;

        using (var http = new HttpClient(handler))
        {
            try
            {
                http.BaseAddress = new Uri("http://localhost:63432/");

                IEnumerable<Cookie> responseCookies = cookies.GetCookies(http.BaseAddress).Cast<Cookie>();

                HttpResponseMessage response = http.PostAsync("api/books/loans/add", 
                    new StringContent(json, Encoding.UTF8, "application/json")).Result;


                Console.WriteLine(response);

        //do stuff//
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }

        }
        Console.WriteLine("Done.");
        Console.ReadLine();
    }

我需要一些关于下一步的建议。我已经在这里阅读了大量的答案,但我似乎无法找到符合我需求的答案。

谢谢!

0 个答案:

没有答案