[英]Using .NET to Post a file to Server HttpWebRequest or WebClient
[英]Httpwebrequest--POST method using text file
我正在尝试使用.NET类而不是curl命令行复制Couch数据库。 我以前从未使用过WebRequest或Httpwebrequest,但我尝试使用它们通过以下脚本发出发布请求。
这是用于ouchdb复制的JSON脚本(我知道这可行):
{ ""_id"":"database_replicate8/7/12", "source":sourcedb, ""target"":"targetDB", ""create_target"":true, ""user_ctx"": { ""roles"": ["myrole"] } }
上面的脚本被放入文本文件sourcefile.txt中。 我想使用这一行并将其放入使用.NET功能的POST Web请求中。
研究完之后,我选择使用httpwebrequest类。 以下是到目前为止的内容-我是从http://msdn.microsoft.com/zh-cn/library/debx8sh9.aspx获得的
HttpWebRequest bob = (HttpWebRequest)WebRequest.Create("sourceDBURL");
bob.Method = "POST";
bob.ContentType = "application/json";
byte[] bytearray = File.ReadAllBytes(@"sourcefile.txt");
Stream datastream = bob.GetRequestStream();
datastream.Write(bytearray, 0, bytearray.Length);
datastream.Close();
我能正确处理吗? 我是Web技术的新手,仍然在学习http调用的工作方式。
这是我用于创建POST请求的方法:
private static HttpWebRequest createNewPostRequest(string apikey, string secretkey, string endpoint)
{
HttpWebRequest request = WebRequest.Create(endpoint) as HttpWebRequest;
request.Proxy = null;
request.Method = "POST";
//Specify the xml/Json content types that are acceptable.
request.ContentType = "application/xml";
request.Accept = "application/xml";
//Attach authorization information
request.Headers.Add("Authorization", apikey);
request.Headers.Add("Secretkey", secretkey);
return request;
}
在我的主要方法中,我这样称呼它:
HttpWebRequest request = createNewPostRequest(apikey, secretkey, endpoint);
然后我将数据传递给这样的方法:
string requestBody = SerializeToString(requestObj);
byte[] byteStr = Encoding.UTF8.GetBytes(requestBody);
request.ContentLength = byteStr.Length;
using (Stream stream = request.GetRequestStream())
{
stream.Write(byteStr, 0, byteStr.Length);
}
//Parse the response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
//Business error
if (response.StatusCode != HttpStatusCode.OK)
{
Console.WriteLine(string.Format("Error: response status code is{0}, at time:{1}", response.StatusCode, DateTime.Now.ToString()));
return "error";
}
else if (response.StatusCode == HttpStatusCode.OK)//Success
{
using (Stream respStream = response.GetResponseStream())
{
XmlSerializer serializer = new XmlSerializer(typeof(SubmitReportResponse));
reportReq = serializer.Deserialize(respStream) as SubmitReportResponse;
}
}
...
就我而言,我从一个类序列化/反序列化我的身体-您将需要更改它以使用您的文本文件。 如果您想轻松解决问题,则将SerializetoString
方法更改为将文本文件加载到字符串的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.