首页 > 解决方案 > C# GetAsync 不适用于 Django Rest 框架

问题描述

这是我的 HomeController.cs 中的函数:

async Task<Dictionary<Object, Object>> GetSiteWithID(int ID)
    {
        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Token", "94afa9a8b0804e65a53d335dec230478f69b39c5");
            HttpResponseMessage responseMessage = await client.GetAsync("http://localhost:8000/site/1");
            responseMessage.EnsureSuccessStatusCode();
            return await responseMessage.Content.ReadAsAsync<Dictionary<Object, Object>>();
        }
    }

问题是它正确地将标头发送为“授权:令牌 94afa9a8b0804e65a53d335dec230478f69b39c5”,但 Django Rest Framework 没有得到它。

我需要发送的任何其他内容,因为如果我使用 Postman 进行测试,它可以工作,但它也会发送其他我不知道是否有必要的东西。

更新:是的,我正在使用 localhost:8000 - django 中开发服务器的默认端口。之后我将转移到生产服务器。我从 django 服务器得到的响应是“未提供身份验证详细信息”。状态码 401 - 未经授权。

更新:尝试了 react 并在 Django 中实现了 CORS 白名单列表后,请求成功了!当我将 .NET 本地服务器添加到白名单时,Django 仍然说“未提供身份验证详细信息”。所以 .Net Core 2.2 中的某些东西没有发送标头!

标签: c#djangodjango-rest-frameworkgetasync

解决方案


解决了。显然,由于没有斜杠,Django 服务器返回 301,而我的代码没有考虑到这一点。如果我在邮递员中测试没有斜杠的 url,它会处理 301 并将带有斜杠的请求重新发送到我可以收集的内容。在 url 上加上斜杠会绕过 301 响应。


推荐阅读