Httpwebrequest--使用文本文件的POST方法

本文关键字:POST 方法 文件 文本 Httpwebrequest-- | 更新日期: 2024-11-07 07:43:23

我正在尝试使用.NET类而不是curl命令行复制Couch数据库。我以前从未使用过WebRequest或Httpwebrequest,但我正在尝试使用它们通过下面的脚本发出post请求。

这是用于 couchdb 复制的 JSON 脚本(我知道这有效):

{ ""_id"":"database_replicate8/7/12", "source":sourcedb, ""target"":"targetDB", ""create_target"":true, ""user_ctx"": { ""roles"": ["myrole"] } }

上面的脚本被放入一个文本文件,源文件.txt。我想采用这一行并使用 .NET 功能将其放入 POST Web 请求中。

在研究了它之后,我选择使用 httpwebrequest 类。 以下是我到目前为止所拥有的 - 我从 http://msdn.microsoft.com/en-us/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 调用的工作原理。

Httpwebrequest--使用文本文件的POST方法

这是我用来创建 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 方法更改为将文本文件加载到字符串的方法。