gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 使用 cURL 或类似方法在应用程序中执行请求

转载 作者:行者123 更新时间:2023-12-02 23:06:05 27 4
gpt4 key购买 nike

我正在 ASP.NET MVC(使用 C#)中构建一个应用程序,我想知道如何执行像curl http://www.mywebsite.com/clients_list.xml 这样的调用在我的 Controller 内基本上我想构建一种 REST API 来执行诸如显示编辑和删除之类的操作,例如 Twitter API。

但不幸的是,直到现在我还没有在这个网站上找到除了 Windows 的 cURL 之外的任何内容:http://curl.haxx.se/

所以我不知道是否有任何传统的方法可以通过诸如发布删除和放置请求等方法从 URL 检索此类调用...

我只是想知道一种简单的方法来在我的 ASP.NET MVC 应用程序上的 Controller 内执行像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

但是在我的 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;

现在的问题是这个请求返回 403 Forbidden,我真的不知道为什么它在curl上运行得很好

:\

<小时/>

更新:

我终于设法让它工作了,但可能有一种方法可以让它更干净、更漂亮,因为我是 C# 新手,我需要更多的知识来做到这一点,POST 参数的传递方式让我非常很困惑,因为有很多代码只是传递参数。

好吧,我已经创建了一个要点 - 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 Starter kit Preview 2 中找到该库及其源代码,但是它可以独立于其中的其余内容使用。

附注我在我的 Twitter 帐户上测试了这段代码,它有效。

关于asp.net-mvc - ASP.NET MVC - 使用 cURL 或类似方法在应用程序中执行请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1605814/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com