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

标签 c# asp.net-mvc-3 file-upload console-application webclient

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

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

The remote server returned an error: (500) Internal Server Error.

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

Object reference not set to an instance of an 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 映射到的名为"file"的输入来发布 enctype 设置为 multipart/form-data 的表单。尝试将您的服务器端方法更改为:

[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");
}

关于c# - 如何从控制台应用程序将文件上传到 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10002299/

相关文章:

c# - RedirectToAction 到不同的 Controller 而不改变 URL

c# - 当范围很大时,VSTO 4 & C# NamedRange.RefersToRange 抛出 Com 异常

c# - 当来自 db 的数据不好时是否应该抛出异常?

c# - 使用 PInvoke 在 C# 中等效于 C unsigned char 数组

image - MVC3 uploadify 上传图片到文件夹

C# .exe 将多个文件上传到 PHP 服务器 - 文件名参数?

c# - 如何在 AutoMapper 中映射阴影属性

asp.net-mvc-3 - 没有为此对象定义无参数构造函数 MVC3

php - Blueimp jQuery 文件上传与数据库集成

html - 如何重置 ReactJS 文件输入