我有一个使用Django创建的REST Web服务方法,它处理/处理文件上传。 如何使用C#从我的Windows窗体/桌面应用程序中使用它? 另外,有人可以解释如何在C#中进行字典参数传递,如下面的python片段代码?
import requests
url = "http://<url>
files = {'file' : open("<filename>", "rb").read(), 'name':'sample.txt'}
r = requests.post(url, files)
答案 0 :(得分:0)
如果您可以使用DNF45,那么MultipartFormDataContent将为您完成大部分繁重工作。以下示例将照片上传到模仿表单帖子的picpaste。然后它使用HtmlAgility来挑选比你要求的更多的响应,但是当你必须使用交互式网页时,它们就像是Web服务一样,是一个很方便的事情。
显然,您必须将文件名更改为指向您自己计算机上的图片。这不应该是生产等级,只是我弄清楚如何操纵picpaste因为我太便宜而无法支付imgur。
using System;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Mime;
namespace picpaste1
{
class Program
{
static void Main(string[] args)
{
var fi = new FileInfo(@"path\to\picture.png");
using (var client = new HttpClient())
using (var mfdc = new MultipartFormDataContent())
using (var filestream = fi.OpenRead())
using (var filecontent = new StreamContent(filestream))
{
filecontent.Headers.ContentDisposition =
new ContentDispositionHeaderValue(DispositionTypeNames.Attachment)
{
FileName = fi.Name,
Name = "upload"
};
filecontent.Headers.ContentType = new MediaTypeHeaderValue("image/png");
mfdc.Add(new StringContent("7168000"), "MAX_FILE_SIZE");
mfdc.Add(filecontent);
mfdc.Add(new StringContent("9"), "storetime");
mfdc.Add(new StringContent("no"), "addprivacy");
mfdc.Add(new StringContent("yes"), "rules");
var uri = "http://picpaste.com/upload.php";
var res = client.PostAsync(uri, mfdc).Result;
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(res.Content.ReadAsStringAsync().Result);
uri = doc.DocumentNode.SelectNodes("//td/a").First()
.GetAttributeValue("href","NOT FOUND");
res = client.GetAsync(uri).Result;
doc.LoadHtml(res.Content.ReadAsStringAsync().Result);
var foo = doc.DocumentNode.SelectNodes("//div[@class='picture']/a").First()
.GetAttributeValue("href","NOT FOUND");
Console.WriteLine("http://picpaste.com{0}", foo);
Console.ReadLine();
}
}
}
}
如果响应是JSON而不是HTML(可能是Web服务),请使用Newtonsoft.Json解析器。网上有教程。它是全面而快速的,我的首选武器。从广义上讲,您可以创建类来为JSON中期望的对象图建模,然后使用它们来键入泛型方法调用。
using Newtonsoft.Json;
var res = client.PostAsync(uri, mfdc).Result;
Foo foo = JsonConvert.DeserializeObject<Foo>(res.Content.ReadAsStringAsync().Result);
你可以从NuGet获得HtmlAgility和Newtonsoft.Json。