我的建筑中的应用程序ASP.NET 视(使用C#)和我想知道我怎么可以执行的呼叫喜欢卷曲 http://www.mywebsite.com/clients_list.xml 在我的控制 基本上,我想建立一种休息API执行的行动,例如编辑和显示删除,诸如Twitter API。

但不幸的是,直到现在我没有找到任何东西除了这cURL for windows在这个网站: http://curl.haxx.se/

所以我不知道如果有任何传统方法检索这样的呼叫的从网址的方法后删除并放在请求,等等。

我只是想知道一个简单的方法来执行命令喜欢蜷缩在我的控制我的ASP.NET 软应用程序。


更新:

嗨,所以我设法使获得请求,但是现在我有一个严重的问题,在取后请求例如,我使用更新的状态API从Twitter,在卷曲会工作这样的:

curl -u user:password -d "status=playing with cURL and the Twitter API" http://twitter.com/statuses/update.xml

但是我的ASP.NET 视申我做的这样在我的自定义功能:

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;

现在的问题是,这种请求是返回403禁止的, 我真的不知道为什么,如果它完美的作品在卷曲

:\


更新:

我终于管理得到它的工作,但可能有一种方法来使它更清洁和美丽的,因为我是新C#我会需要更多的知识做到这一点,该办法后的参数是通过使我非常困惑,因为大量的代码,只是通过参数。

嗯,我已经创建了一个要点 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
    */
}
有帮助吗?

解决方案

尝试使用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();

您可以在 WCF REST入门套件中找到此库及其来源预览2 ,但它可以独立于那里的其他东西使用。

P.S。我在我的推特账户上测试了这段代码,但它确实有用。

其他提示

使用 HttpWebRequest HttpWebResponse :

public string GetResponseText(string url) {
    string responseText = String.Empty;
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    using (StreamReader sr = new StreamReader(response.GetResponseStream())) {
        responseText = sr.ReadToEnd();
    }
    return responseText;
}

要发布数据:

public string GetResponseText(string url, string postData) {
    string responseText = String.Empty;
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    request.ContentLength = postData.Length;
    using (StreamWriter sw = new StreamWriter(request.GetRequestStream())) {
        sw.Write(postData);
    }
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    using (StreamReader sr = new StreamReader(response.GetResponseStream())) {
        responseText = sr.ReadToEnd();
    }
    return responseText;
}

这是单一行代码,我在使用电话给一个宁静的API返回手机中。

return ((dynamic) JsonConvert.DeserializeObject<ExpandoObject>(
        new WebClient().DownloadString(
            GetUri(surveyId))
    )).data;

注意到

  • Uri是产生关阶段使用surveyId和全权证书
  • 在"数据"财产的一部分de-化JSON对象返回 由SurveyGizmo API

完整的服务

public static class SurveyGizmoService
{
    public static string UserName { get { return WebConfigurationManager.AppSettings["SurveyGizmo.UserName"]; } }
    public static string Password { get { return WebConfigurationManager.AppSettings["SurveyGizmo.Password"]; } }
    public static string ApiUri { get { return WebConfigurationManager.AppSettings["SurveyGizmo.ApiUri"]; } }
    public static string SurveyId { get { return WebConfigurationManager.AppSettings["SurveyGizmo.Survey"]; } }

    public static dynamic GetSurvey(string surveyId = null)
    {
        return ((dynamic) JsonConvert.DeserializeObject<ExpandoObject>(
                new WebClient().DownloadString(
                    GetUri(surveyId))
            )).data;
    }

    private static Uri GetUri(string surveyId = null)
    {
        if (surveyId == null) surveyId = SurveyId;
        return new UriBuilder(ApiUri)
                {
                        Path = "/head/survey/" + surveyId,
                        Query = String.Format("user:pass={0}:{1}", UserName, Password)
                }.Uri;
    }
}

查看System.Net. WebClient 上课。它应该提供您需要的功能。对于更精细的控制,您可能会发现 WebRequest 更有用,但WebClient似乎最适合您的需求。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top