C# Can';不要使用Twitter API来推特特殊字符

C# Can';不要使用Twitter API来推特特殊字符,c#,asp.net,twitter,oauth,restsharp,C#,Asp.net,Twitter,Oauth,Restsharp,我正在创建一个使用API的twitter机器人。我使用的唯一软件包是RestSharp。如果可能的话,我想要一个解决方案,不包括我使用的助手包 这是我的密码: static bool tweet(string tweetstr) { RestClient client = new RestClient("https://api.twitter.com"); RestRequest r = new RestRequest("/1.1/statuses/update.json",

我正在创建一个使用API的twitter机器人。我使用的唯一软件包是RestSharp。如果可能的话,我想要一个解决方案,不包括我使用的助手包

这是我的密码:

static bool tweet(string tweetstr)
{
    RestClient client = new RestClient("https://api.twitter.com");

    RestRequest r = new RestRequest("/1.1/statuses/update.json", Method.POST);

    //tweetstr = WebUtility.UrlEncode(tweetstr);
    //r.AddParameter("status", tweetstr, ParameterType.QueryStringWithoutEncode);
    r.AddQueryParameter("status", tweetstr);

    client.Authenticator = OAuth1Authenticator.ForProtectedResource(API_key, API_secret_key, access_token, access_token_secret);

    IRestResponse res = client.Execute(r);

    if (res.StatusCode == System.Net.HttpStatusCode.OK)
    {
        Console.WriteLine(DateTime.Now.ToString() + " Tweeted: " + tweetstr);
        return true;
    }
    else
    {
        Console.WriteLine("Couldn't tweet!\nError code: " + res.StatusCode.ToString() + "\nTried to tweet: " + tweetstr + "\nResponse: " + res.Content.ToString());
        return false;
    }
}
现在出于某种原因,除非我在字符串中使用特殊字符(例如外语,甚至感叹号),否则它会工作,如果我这样做,它会返回未经授权的错误,消息是“无法对您进行身份验证”

例如,调用
tweet(“testing”)
可以正常工作,但是调用
tweet(“testing!”)
将返回错误

正如您从评论中看到的,我自己也尝试过对其进行编码,但要么返回相同的错误,要么以编码状态发布tweet


有什么帮助吗?感谢是前进

替换先前的答案

看起来您的原始代码很接近。与此相反:

r.AddQueryParameter("status", tweetstr);
使用以下命令:

r.AddParameter("status", tweetstr, ParameterType.GetOrPost);

AddQueryParameter
方法似乎没有正确编码特殊字符。参数需要转义和UTF8编码,在构建URL和OAuth的代码之外尝试这样做在本例中不起作用。幸运的是,
AddParameter
似乎处理得很好。

请提供一个有效的,一个无效的。谢谢你的回答,但这并没有解决我的问题。使用EscapeUriValue(stringtweetstr)方法,我尝试推特“!”,但“%21”已在推特上发布。我假设发生这种情况是因为AddQueryParameter也对字符串进行编码,所以它对“%”字符进行编码。我尝试在禁用编码的情况下使用它,但这再次导致了401。@SteveBay很抱歉错过了这一点-我用更简单的答案替换了这个答案。嗨,这个解决方案有效,但我在尝试推特某些特殊字符时仍然得到了401,我尝试推特希伯来文字母:“שלום”。我认为它应该被编码成unicode,但它不起作用。我先尝试转义字符串,但它会推特转义的字符串。有没有办法解决这个问题?非常感谢你!我也有同样的问题,还有表情符号:(