Использование Drupal RestApi с помощью C#

Я работаю, чтобы использовать Drupal Rest Api с помощью C#. Я использую drupal 7.5 и использую его остальные сервисы / API после различных ресурсов.

У меня получилось успешно с почтальоном Google публиковать контент, но когда я пытаюсь скопировать его с кодом C#, мне выдается сообщение с запрещенной ошибкой: " Доступ запрещен для анонимного пользователя. Я использую острый, чтобы использовать этот API. Я довольно много исследовал и пока не нашел решения, а также не заметил, чтобы кто-нибудь делал эту работу в C#. Ниже приведен фрагмент кода, который я написал на основе почтальона


        var client = new RestClient("drupasitename/rest/node");
        var request = new RestRequest(Method.POST);

        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("authorization", authorisation);
        request.AddHeader("x-csrf-token", token);
        request.AddHeader("cookie", cookie);
        request.AddHeader("content-type", "application/json");
        request.AddHeader("Accept", "application/json");
        request.AddParameter("application/json", "{\r\n  \"type\":\"page\",\r\n  \"title\":\"Page submitted via JSON REST\",\r\n  \"body\":{\r\n    \"und\":[\r\n      {\r\n        \"value\":\"This is the body of the page.\"\r\n      }\r\n    ]\r\n  }\r\n}", ParameterType.RequestBody);
        IRestResponse response = client.Execute(request);

cookie и токен получаются после успешной попытки входа в систему с использованием кода C#.

Было бы здорово, если бы кто-нибудь мог дать рекомендации по решению этой проблемы. С уважением

3 ответа

Решение

Все, что вам нужно, это добавить UserAgent в заголовок http-запроса.

Я использовал следующее, чтобы войти в drupal

var client = new RestClient("drupalsitename/user/login");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/json");
request.AddHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0");
request.AddParameter("application/json", "{\"name\":\"username\",\n\"pass\":\"password\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

Это обеспечит вас необходимой информацией о сеансе и токене, а затем вы сможете использовать эту информацию для создания поста, аналогично тому, что я написал в вопросе.

Я получил информацию о пользователе, включая куки и токен.

 private login_user LoginAsync(string username,string password)
    {
        try
        {
            RestClient client = new RestClient(base_url);   
            var request = new RestRequest("login", Method.GET);
            request.AddHeader("Content-Type", "Application/JSON");

            client.Authenticator = new HttpBasicAuthenticator(username, password);
            var restResponse = client.Execute(request);
            var content = restResponse.Content;
            string context_modifytoken = content.ToString().Replace("X-CSRF-Token", "X_CSRF_Token");
            var current_login_user = JsonConvert.DeserializeObject<login_user>(context_modifytoken);
            current_login_user.data.session_name = restResponse.Cookies[0].Name;
            current_login_user.data.session_id = restResponse.Cookies[0].Value;

            return current_login_user;

        }
        catch (HttpRequestException ex) { throw ex; }               

    }

И раздел Почта:

 RestClient client = new RestClient(base_url);
        var request = new RestRequest("v1.0/barcodes", Method.POST);
        request.AddHeader("cache-control", "no-cache");                      
        request.AddHeader("X-CSRF-Token", current_user.data.X_CSRF_Token);
        request.AddHeader("content-type", "application/json");
        request.AddHeader("Accept", "application/json");
        request.AddHeader("cookie", current_user.data.session_name+"="+ current_user.data.session_id);
        request.AddHeader("User-Agent", ver);

        var queryresult = client.Execute(request);

имеет ошибку:queryresult = "StatusCode: запрещено, Content-Type: application / problem + json; charset = utf-8, Content-Length: -1)"

and Drupal log: restful 2016-09-21 16:32 У вас нет доступа для создания нового образца штрих-кода... Аноним (не подтвержден)

Другие вопросы по тегам