2016-09-19 5 views
0

私はC#を使用してDrupal Rest Apiを使用するように取り組んでいます。私はdrupal 7.5を使用しており、さまざまなリソースに従った休憩サービス/ APIを利用しています。C#を使用してDrupal RestApiを消費する

私はコンテンツを投稿するには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

私は以前にリンクをたどっていて、私は郵便配達でそれを成功させましたが、私が書いたとき":匿名ユーザーのアクセスが拒否されました"というエラーメッセージが表示される – shunilkarki

+1

リクエストヘッダーにUserAgentを追加しようとしましたか? –

答えて

1

必要なのは、HTTPリクエストヘッダ

0

へのUserAgentを追加して、クッキー&トークンが含まれます。

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

    } 

ポストセクション:QueryResultでは=「のStatusCode:禁止、コンテンツの種類:アプリケーション/問題+ JSON;のcharset = UTF-8、コンテンツ長:

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

は、エラーが発生しました - 1)」

とDrupalのログ:あなたは新しいサンプルバーコードを作成するためのアクセス権を持っていない 安らか2016年9月21日午前16時32 ...匿名(未検証)

+0

ログインは投稿ですので、 "Method.POST"を使用し、エンドポイントは "user/login"にする必要があります。 x-csrf-tokenを使用する必要はありません。実行後、ポストを作るために必要なセッションID、名前、x-csrfトークンに関する情報が得られます。 – shunilkarki

+0

私はCreate.And addheader cookie、x-csrf-tokenにログインして日付を投稿するためにMethod.POSTを使用しました。あなたはそれを行う方法を示す例があります。エラーを指摘してください。 http://stackoverflow.com/questions/39652010/c-sharp-restsharp-client-connect-drupal-rest-server-access-denied-for-user-anony新しいです。 – ewen

+0

これは、 "ログイン"について安心してエンドポイントであり、更新はREST_SERVERを新しい.Iで成功させました。記事の投稿&ポストマンで成功しましたが、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); 

をDrupalのためにこれが必要なセッションとトークンの情報を提供します、その後、基本的に私は疑問

関連する問題