繁体   English   中英

如何从控制台应用程序将文件上传到 ASP.NET MVC

[英]How to upload a file to ASP.NET MVC from a console application

我正在尝试让控制台应用程序将 XML 文件发送到在 ASP.NET MVC 3 中开发的 web 应用程序,并接收另一个 XML 作为响应。

控制台应用程序返回的错误是:

远程服务器返回错误:(500) 内部服务器错误。

当我运行 Fiddler2 时,我看到这个错误:

Object 引用未设置为 object 的实例。

控制台应用程序中的代码是:

static void Main(string[] args)
{
    var wc = new WebClient();
    byte[] response = wc.UploadFile("http://mysite.com/Tests/Test", "POST", "teste.xml");
    string s = System.Text.Encoding.ASCII.GetString(response);
    Console.WriteLine(s);
    Console.ReadKey();
}

MVC Controller 中的代码是:

[HttpPost]
public ActionResult Test(HttpPostedFileBase file)
{
    XElement xml = XElement.Load(new System.IO.StreamReader(file.InputStream));
    var test = new MyTest();
    return File(test.RunTest(xml), "text/xml", "testresult.xml");
}

RunTest()运行良好,因为当我通过表单上传文件时此方法有效(在具有相同名称的方法中,使用方法 GET)。 RunTest()返回带有响应的 XML。

当我调试 MVC 应用程序时,我看到了问题:变量file为空!

我该如何解决? 我必须在我的控制台应用程序中更改什么才能实际发送文件? 还是改MVC方式就这样了?

而且,在尝试使用WebClient之前,我在这里尝试了这段代码: http://msdn.microsoft.com/en-us/library/debx8sh9.aspx ,结果相同。

您的问题是 WebClient.UploadFile 没有使用 MVC 的名为“文件”的输入将 enctype 设置为 multipart/form-data 到 map 来发布表单。 尝试将您的服务器端方法更改为此:

[HttpPost]
public ActionResult Test()
{
    var file = Request.Files[0] as HttpPostedFile;
    XElement xml = XElement.Load(new System.IO.StreamReader(file.InputStream));
    var test = new MyTest();
    return File(test.RunTest(xml), "text/xml", "testresult.xml");
}

您需要为上传的文件传递参数名称。 这对于 WebClient 是不可能的。

查看

使用webclient上传文件时如何指定form参数

发送 multipart/form-data 内容类型请求

如果有人有稍微不同但相关的问题:

我还必须使用 function UploadData而不是UploadFile来完成它。 在这种情况下,而不是在 controller 中写入:

var file = Request.Files[0] as HttpPostedFile;
XElement xml = XElement.Load(new System.IO.StreamReader(file.InputStream));

可以简单地写:

XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream));

更轻松; ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM