Получение запрещенного (CSRF cookie не установлен.) ошибка из django в C#

#c# #django #django-csrf #csrf-token

#c# #django #django-csrf #csrf-токен

Вопрос:

Я отправляю данные в приложение django с использованием кода C #:

 using (WebClient client = new WebClient())
{
    NameValueCollection postData = new NameValueCollection()
           {
              { "user_id", "12345" }
           };
    string pagesource = Encoding.UTF8.GetString(client.UploadValues(url_ad, postData));
}
 

Но я получаю эту ошибку:

Запрещено (CSRF cookie не установлен.)

Код для получения данных в django views.py :

 def get_user_id(request):
    if request.method == 'POST':
        user_id = request.POST.get('user_id')
        record = User.objects.filter(user=user_id)
        if not record:
            new_user = User(user = user_id)
            new_user.save()
        return HttpResponse(
            json.dumps(response_data),
            content_type="application/json"
        )
    else:
        return HttpResponse(
            json.dumps({"nothing to see": "this isn't happening"}),
            content_type="application/json"
        )
 

Я знаю, что это за ошибка и как ее исправить в веб-приложениях, но я не знаю, как ее решить при отправке данных с использованием C #.

Также, поскольку я не использую.Я не могу использовать NET framework 4.5 HttpContent , который, как я слышал, может как-то исправить это.

Итак, как я могу это исправить с WebClient помощью или любых других доступных решений для.NET framework 4?

Ответ №1:

Вы можете освободить проверку csrf, поместив в свою функцию следующий декоратор:

 from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def get_user_id(request):
   ...
 

Комментарии:

1. Хотя отключить эту защиту не очень хорошая идея, я попробовал, но она просто отключила ошибку, но код по какой-то причине перестал работать

2. Вероятно, потому, что response_data не определен.

3. Да, я думаю, это была проблема. Но все же я думаю, что это неправильное решение