2016-09-19 11 views
0

Я работаю над потреблением Drupal Rest Api, используя C#. Я использую drupal 7.5 и использую его службы отдыха/api, следуя различным ресурсам.Потребление Drupal RestApi с C#

У меня был успешный почтовый работник Google, чтобы опубликовать контент, но когда я пытаюсь воспроизвести его с помощью кода C#, мне будет предложено с запрещенной ошибкой: Доступ запрещен для анонимного пользователя. Я использую rest-sharp для использования этого 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); 

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

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

+0

ли эта помощь? http://drupal.stackexchange.com/questions/97993/rest-services-module-access-denied-for-user-anonymous –

+0

Я пошел по ссылке раньше, и мне удалось это сделать в Postman, но когда я пишу код и попробуйте сделать с ним, ошибка «: Доступ запрещен для анонимного пользователя» persist – shunilkarki

+1

Вы пытались добавить UserAgent в заголовок запроса? –

ответ

1

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

0

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

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: применение/проблемы + JSon, кодировка = UTF-8, Content-Length: - 1)»

и Drupal журнала: успокоительные 2016-09-21 16:32 у вас нет доступа для создания нового образца штрих-кода ... Anonymous (не проверено)

+0

Вход в систему, поэтому вам нужно использовать «Method.POST», а конечной точкой является «пользователь/логин». Вам не нужно использовать x-csrf-токен. После выполнения вы получите информацию о идентификаторе сеанса, имени и токенах x-csrf, которые необходимы для создания сообщения. – shunilkarki

+0

Я использовал Method.POST для входа в систему и отправки даты для создания. И я добавляю cookie, x-csrf-token. Вы знаете, имеет fail.did, у вас есть пример, чтобы показать, как это сделать? или указать ошибку. http://stackoverflow.com/questions/39652010/c-sharp-restsharp-client-connect-drupal-rest-server-access-denied-for-user-anony это новое. – ewen

+0

, что является конечной точкой, если вы будете спокойны в отношении «входа в систему», и обновите использование REST_SERVER в новом. Успешно с плакатом и почтальоном создать статью, но не удалось на C#. – ewen

0

Я использовал следующий для входа в Друпал

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); 

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