Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用c语言消费Drupal RestApi#_C#_Rest_Drupal 7_Restsharp - Fatal编程技术网

C# 使用c语言消费Drupal RestApi#

C# 使用c语言消费Drupal RestApi#,c#,rest,drupal-7,restsharp,C#,Rest,Drupal 7,Restsharp,我正在使用c#使用Drupal Rest Api。我正在使用drupal 7.5,并使用它的rest服务/api,遵循各种资源 我已经成功地与谷歌的邮递员一起发布了内容,但当我尝试用c代码复制内容时,我被提示出现禁止的错误:拒绝匿名用户访问。 我正在使用rest sharp来使用此API。我已经做了很多研究,还没有找到解决方案,也没有注意到有人在c#中做这项工作。 下面是我根据postman编写的代码片段 cookie和token是在使用c#代码成功登录后获得的 如果有人能为解决这个问题提供指

我正在使用c#使用Drupal Rest Api。我正在使用drupal 7.5,并使用它的rest服务/api,遵循各种资源

我已经成功地与谷歌的邮递员一起发布了内容,但当我尝试用c代码复制内容时,我被提示出现禁止的错误:拒绝匿名用户访问。 我正在使用rest sharp来使用此API。我已经做了很多研究,还没有找到解决方案,也没有注意到有人在c#中做这项工作。 下面是我根据postman编写的代码片段


cookie和token是在使用c#代码成功登录后获得的

如果有人能为解决这个问题提供指导,那就太好了。
关于

您只需要将UserAgent添加到http请求头中

我得到了包括cookie和令牌在内的用户信息

 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=“状态代码:禁止,内容类型:应用程序/问题+json;字符集=utf-8,内容长度:-1)”

和Drupal日志:
restful 2016-09-21 16:32您无权创建新的样本条码。。。匿名(未经验证)

我使用以下方法登录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);

这将为您提供必要的会话和令牌信息,然后基本上您可以使用这些信息发布帖子,类似于我在问题中所写的内容

这有帮助吗?我之前跟踪过这个链接,我已经成功地在Postman中完成了它,但是当我编写代码并尝试使用它时,错误是“:Access denied for user anonymous”persistent您是否尝试将UserAgent添加到请求头中?没有,我没有尝试过。如果我可以请你详细说明一下,因为我对这个主题知之甚少谢谢你Rawitas Krungkaew,我用useragent再试了一次,效果很好。登录是Post,所以你需要使用“Method.Post”,终点是“user/Login”。您不需要使用x-csrf-token。执行后,您将获得有关会话id、名称和发布所需的x-csrf令牌的信息。我使用方法.post登录并发布创建日期。我添加了标头cookie,x-csrf-token。您知道该操作失败了。您有示例演示如何操作吗?或者指出错误。它是新的。这是restful关于“登录”的端点,并在new中使用REST_服务器进行更新。我成功地使用了create article的poster&postman,但在C#中失败。我发现了错误,它与用户_代理无关。它是cookie错误。更改为:request.AddParameter(会话名称,会话ID,参数类型.cookie);这是钥匙。
 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);
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);