zan*_*ona 5 api twitter rest asp.net-mvc curl
我正在ASP.NET MVC中构建一个应用程序(使用C#),我想知道如何在我的控制器中执行像curl http://www.mywebsite.com/clients_list.xml这样的调用基本上我想构建一种REST API,用于执行show edit和delete等操作,例如Twitter API.
但不幸的是,到目前为止,除了本网站上的cURL for windows之外,我没有找到任何东西:http://curl.haxx.se/
所以我不知道是否有任何传统的方式从URL中检索这种类型的调用,如删除后的方式和放置请求等...
我只想知道一种简单的方法来在我的ASP.NET MVC应用程序中执行我的控制器内的curl等命令.
更新:
嗨所以我设法做了GET请求,但现在我在检索POST请求时遇到了严重的问题,例如,我正在使用来自Twitter的更新状态API,在curl中这样工作如下:
curl -u user:password -d "status=playing with cURL and the Twitter API" http://twitter.com/statuses/update.xml
Run Code Online (Sandbox Code Playgroud)
但在我的ASP.NET MVC应用程序中,我在我的自定义函数中这样做:
string responseText = String.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://twitter.com/statuses/update.xml");
request.Method = "POST";
request.Credentials = new NetworkCredential("username", "password");
request.Headers.Add("status", "Tweeting from ASP.NET MVC C#");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
responseText = sr.ReadToEnd();
}
return responseText;
Run Code Online (Sandbox Code Playgroud)
现在问题是这个请求正在返回403 Forbidden,我真的不知道为什么它在curl上完美运行
:\
更新:
我终于设法让它工作了,但是可能有一种方法可以使它更清洁和漂亮,因为我是C#的新手,我需要更多的知识才能做到这一点,POST params传递的方式让我非常困惑,因为很多代码只能传递params.
好吧,我已经创建了一个Gist - http://gist.github.com/215900,所以每个人都可以随意修改它.谢谢你的帮助çağdaş
也按照这里的代码:
public string TwitterCurl()
{
//PREVENT RESPONSE 417 - EXPECTATION FAILED
System.Net.ServicePointManager.Expect100Continue = false;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://twitter.com/statuses/update.xml");
request.Method = "POST";
request.Credentials = new NetworkCredential("twitterUsername", "twitterPassword");
//DECLARE POST PARAMS
string headerVars = String.Format("status={0}", "Tweeting from ASP.NET MVC C#");
request.ContentLength = headerVars.Length;
//SEND INFORMATION
using (StreamWriter streamWriter = new StreamWriter(request.GetRequestStream(), ASCIIEncoding.ASCII))
{
streamWriter.Write(headerVars);
streamWriter.Close();
}
//RETRIEVE RESPONSE
string responseText = String.Empty;
using (StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream()))
{
responseText = sr.ReadToEnd();
}
return responseText;
/*
//I'M NOT SURE WHAT THIS IS FOR
request.Timeout = 500000;
request.ContentType = "application/x-www-form-urlencoded";
request.UserAgent = "Custom Twitter Agent";
#if USE_PROXY
request.Proxy = new WebProxy("http://localhost:3000", false);
#endif
*/
}
Run Code Online (Sandbox Code Playgroud)
尝试使用 Microsoft.Http.HttpClient。这就是您的请求的样子
var client = new HttpClient();
client.DefaultHeaders.Authorization = Credential.CreateBasic("username","password");
var form = new HttpUrlEncodedForm();
form.Add("status","Test tweet using Microsoft.Http.HttpClient");
var content = form.CreateHttpContent();
var resp = client.Post("http://www.twitter.com/statuses/update.xml", content);
string result = resp.Content.ReadAsString();
Run Code Online (Sandbox Code Playgroud)
您可以在WCF REST Starter kit Preview 2 中找到这个库及其源代码,但是它可以独立于其中的其余内容使用。
PS 我在我的 twitter 帐户上测试了这段代码,它可以工作。
| 归档时间: |
|
| 查看次数: |
16747 次 |
| 最近记录: |