【问题标题】:C# RESTSharp client connect Drupal Rest_server Access denied for user anonymousC# RESTSharp 客户端连接 Drupal Rest_server 拒绝用户匿名访问
【发布时间】:2016-09-23 03:17:10
【问题描述】:

我正在搜索这篇文章Consuming Drupal RestApi with c# 还有http://tylerfrankenstein.com/code/drupal-services-csrf-token-firefox-poster

我对 cookie 和令牌有疑问。我已经用 firefox 在海报中进行了测试,并在创建的文章中成功发布。Tamper Data 具有请求标头。

篡改数据

nid:“129342” uri:http://www.tsghy.com.cn/services/node/129342

邮递员创建了邮政编码

                var client = new RestClient("http://www.tsghy.com.cn/services/node");
            var request = new RestRequest(Method.POST);
            request.AddHeader("postman-token", "5c28c9d6-d640-a4f0-a549-b6018e62907d");
            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("x-csrf-token", "s0Z17LT7neX_K6grHgoJCUPR6VcL2QxRlNLmbRWeExE");
            request.AddHeader("content-type", "application/x-www-form-urlencoded");
            request.AddParameter("application/x-www-form-urlencoded", "type=article&title=test%201", ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);

我会疯的,

并替换为 C#,我拒绝用户匿名访问。我的代码如下: 首先我用 Rest 登录 Drupal

private login_user2 loginAsync2(string username, string password)
    {
        try
        {
            RestClient client = new RestClient(base_url2);
            var request = new RestRequest("user/login.json", Method.POST);
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            client.Authenticator = new SimpleAuthenticator("username",username,"password",password);
            var restResponse = client.Execute(request);
            var content = restResponse.Content;
            if (restResponse.StatusCode==System.Net.HttpStatusCode.OK)
            {
                login_user2 loginuser = JsonConvert.DeserializeObject<login_user2>(content.ToString());                    
                request = new RestRequest("session/token", Method.GET);
                restResponse = client.Execute(request);
                loginuser.session_token = restResponse.Content.ToString();
                return loginuser;
            }
            else {
                return null;
            }
        }
        catch (Exception ex) { throw ex; }
    }

我对 login/user->token 和 session/token 有疑问,有什么区别?

其次,发布创建数据:

        RestClient client = new RestClient(base_url2);
        var request = new RestRequest("node", Method.POST);
        request.AddHeader("cache-control", "no-cache"); 
        request.AddHeader("content-type", "application/json; charset=UTF-8");
        request.AddHeader("Accept", "application/json");
        request.AddHeader("cookie", "Drupal.toolbar.collapsed=0; "+current_user2.session_name+"="+current_user2.sessid+"; has_js=1");
        request.AddHeader("x-csrf-token",current_user2.session_token);
        request.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0");
        request.AddParameter("application/json", myjobject, ParameterType.RequestBody);

        var queryresult = client.Execute(request);

【问题讨论】:

    标签: c# drupal restsharp


    【解决方案1】:

    是的,我找到了关键,restful 在 request.addheader(cookie,cookie); 改为:request.AddParameter(session_name,session_id,parametertype.cookie);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-22
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 2020-10-27
      • 2017-01-26
      • 1970-01-01
      相关资源
      最近更新 更多