C# 非英语的Twitter共享按钮

C# 非英语的Twitter共享按钮,c#,asp.net,url,C#,Asp.net,Url,嘿,伙计们,首先我要感谢你们所有人阅读我的问题,感谢你们抽出时间。 我有一个“推特分享”按钮 这是html代码: <a id="TwitterShare" target="_blank" runat="server" rel="nofollow" class="twitter"><i class="fa fa-twitter " aria-hidden="true">غرد</i></a> 代码可以工作并获取url,但是当我共享链接时,t

嘿,伙计们,首先我要感谢你们所有人阅读我的问题,感谢你们抽出时间。 我有一个“推特分享”按钮

这是html代码:

<a id="TwitterShare"  target="_blank"   runat="server" rel="nofollow" class="twitter"><i class="fa fa-twitter "  aria-hidden="true">غرد</i></a>
代码可以工作并获取url,但是当我共享链接时,twitter并没有读取完整的链接,这是因为链接是以这种方式显示的

https://Mywebsite.com/Post/3163/

我试过调试代码,但我发现代码是正确的

我运行了你的代码,它运行良好,我不认为这是一个问题 您的代码(本文中也报告了类似的问题)

您可以使用URL Shortner来缩短URL,并在您的推文句柄中使用它,我尝试过并能够共享推文

您可以注册并生成GenericAccessToken

用您可以生成的GenericAccessToken替换
\u bitlyToken


用法

确保页面标记为异步。

辅助方法

public异步任务ShortenAsync(字符串longUrl)
{
//感谢@devfunkd-参见https://stackoverflow.com/questions/31487902/nuget-package-for-bitly-to-shorten-the-links
var url=string.Format(“https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}“,
_bitlyToken,HttpUtility.UrlEncode(longUrl));
var request=(HttpWebRequest)WebRequest.Create(url);
尝试
{
var response=wait request.GetResponseAsync();
使用(var responseStream=response.GetResponseStream())
{
var reader=新的StreamReader(responseStream,Encoding.UTF8);
var jsonResponse=JObject.Parse(wait reader.ReadToEndAsync());
var statusCode=jsonResponse[“状态代码”].Value();
if(statusCode==(int)HttpStatusCode.OK)
返回jsonResponse[“数据”][“url”].Value();
//还有什么问题吗
WriteLine(“Bitly请求返回错误代码{0},longUrl={2}上的状态文本{1}”,
statusCode,jsonResponse[“status_txt”].Value(),longUrl);
//如果出错怎么办?我返回原来的长url
返回longUrl;
}
}
捕获(WebException ex)
{
var errorResponse=ex.Response;
使用(var responseStream=errorResponse.GetResponseStream())
{
var reader=newstreamreader(responseStream,Encoding.GetEncoding(“utf-8”);
var errorText=reader.ReadToEnd();
//日志错误文本
WriteLine(“Bitly access在url{1}.Content={2}上引发了一个异常{0}”,例如Message、url、errorText);
}
//如果出错怎么办?我返回原来的长url
返回longUrl;
}
} 

多亏了

代码中的哪一行导致了输出https://Mywebsite.com/Post/3163/string FullMineURL=WebsiteURl+Server.UrlEncode(Localurl);TwitterShare是某种库吗?你有它使用的代码吗?看起来它在输出前会进行自动翻译或某种编码。如果你尝试插入一个断点
FullMineURL
,然后检查输出,我怀疑外来字符是否来自TwitterShare,它是否是执行操作以转发它不是一个库它在上面代码的HTML中显示我在代码的这一部分中得到了null异常var response=wait request.GetResponseAsync();我检查了短链接它很好,在本地主机中不起作用吗?在mscorlib中发生了类型为“System.NullReferenceException”的未处理异常。dll@DarwieshMustafa
string RequestTwitter = "https://twitter.com/intent/tweet?text=";
string WebsiteURl = "https://www.MyWebsite.com/";
string Localurl = "Post/" + Postid + "/" + PostName;
string FullMineURL= WebsiteURl+Server.UrlEncode(Localurl);
string TwitterFinal = RequestTwitter + FullMineURL;
TwitterShare.Attributes.Add("href", TwitterFinal);
protected void Page_Load(object sender, EventArgs e)
{ 
 RegisterAsyncTask(new PageAsyncTask(CurrentPost); 
}
async Task CurrentPost()
{ 
...
var shortenURL =  await p.ShortenAsync(FullMineURL);
string TwitterFinal = RequestTwitter + shortenURL;
TwitterShare.Attributes.Add("href", TwitterFinal);
...
}
public async Task<string> ShortenAsync(string longUrl)
{
    //with thanks to @devfunkd - see https://stackoverflow.com/questions/31487902/nuget-package-for-bitly-to-shorten-the-links

    var url = string.Format("https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}",
            _bitlyToken, HttpUtility.UrlEncode(longUrl));

    var request = (HttpWebRequest)WebRequest.Create(url);
    try
    {
        var response = await request.GetResponseAsync();
        using (var responseStream = response.GetResponseStream())
        {
            var reader = new StreamReader(responseStream, Encoding.UTF8);
            var jsonResponse = JObject.Parse(await reader.ReadToEndAsync());
            var statusCode = jsonResponse["status_code"].Value<int>();
            if (statusCode == (int)HttpStatusCode.OK)
                return jsonResponse["data"]["url"].Value<string>();

            //else some sort of problem
            Console.WriteLine("Bitly request returned error code {0}, status text '{1}' on longUrl = {2}",
                statusCode, jsonResponse["status_txt"].Value<string>(), longUrl);
            //What to do if it goes wrong? I return the original long url
            return longUrl;
        }
    }
    catch (WebException ex)
    {
        var errorResponse = ex.Response;
        using (var responseStream = errorResponse.GetResponseStream())
        {
            var reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
            var errorText = reader.ReadToEnd();
            // log errorText
            Console.WriteLine("Bitly access threw an exception {0} on url {1}. Content = {2}", ex.Message, url, errorText);
        }
        //What to do if it goes wrong? I return the original long url
        return longUrl;
    }
}