使用 VS 2012、ASP.NET Web API 4.0、4.0 的 Web API 客户端库。
我创建了一个“hello world”控制器,并且得到了简单的 get/post 工作。但是,我无法发布文件。
我正在通过 HttpClient 客户端访问该服务,但无论我尝试什么,我都无法让一个简单的 HTML 页面工作(发布文件)。但是,这有它自己的一系列问题(并且内容总是遇到 IsMimeMultipartContent 而我的 HttpClient 没有);我只想让 HttpClient 现在工作。客户端在文件中流式传输正常(我可以看到长度很好),但在服务器上,ReadAsStreamAsync 内的流长度为 0。此外,HttpContext.Current.Request.Files 计数为 0(即使在从 HTML 文件帖子中点击)。
这是控制器:
public class ImportController : ApiController
{
public HttpResponseMessage Post()
{
WriteFile( HttpContext.Current.Server.MapPath( "~/killme.xml" ) );
return new HttpResponseMessage( HttpStatusCode.Accepted );
}
private void WriteFile( string filePath )
{
Request.Content.ReadAsStreamAsync().ContinueWith( task =>
{
try
{
var requestStream = task.Result;
var fileStream = File.Create( filePath );
requestStream.CopyTo( fileStream );
fileStream.Close();
requestStream.Close();
}
catch
{
; // TBD
}
} );
}
}
这是客户端:
var client = new HttpClient();
client.PostAsync( "http://localhost:52800/api/Import", ReadFile() ).ContinueWith( ( task ) =>
{
Console.WriteLine( task.Result.StatusCode.ToString() );
client.Dispose();
} );
private static StreamContent ReadFile()
{
var fileBytes = File.ReadAllBytes( @"C:\temp\killme.xml" );
var ms = new MemoryStream( fileBytes.Length );
ms.Write( fileBytes, 0, fileBytes.Length );
// Can't put this in using; don't know how to dispose
return new StreamContent( ms );
}