如何将httppostedfile发布到webapi? 基本上我希望用户选择一个excel文件,我想将它发布到我的webapi。
gui是用经典的asp.net制作的,webapi是用新的.NET apicontroller制作的。
之前我做过一些api编码,但之后我使用了JSON,这似乎对这种对象效果不佳。
有人可以指出我正确的方向,以便我可以继续搜索信息。现在我甚至不知道要搜索什么。
答案 0 :(得分:1)
我通过这样做解决了这个问题: 在我的控制器中:
using (var client = new HttpClient())
using (var content = new MultipartFormDataContent())
{
client.BaseAddress = new Uri(System.Configuration.ConfigurationManager.AppSettings["PAM_WebApi"]);
var fileContent = new ByteArrayContent(excelBytes);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileName
};
content.Add(fileContent);
var result = client.PostAsync("api/Product", content).Result;
}
这是我的ApiController:
[RoutePrefix("api/Product")]
public class ProductController : ApiController
{
public async Task<List<string>> PostAsync()
{
if (Request.Content.IsMimeMultipartContent())
{
string uploadPath = HttpContext.Current.Server.MapPath("~/uploads");
if (!System.IO.Directory.Exists(uploadPath))
{
System.IO.Directory.CreateDirectory(uploadPath);
}
MyStreamProvider streamProvider = new MyStreamProvider(uploadPath);
await Request.Content.ReadAsMultipartAsync(streamProvider);
List<string> messages = new List<string>();
foreach (var file in streamProvider.FileData)
{
FileInfo fi = new FileInfo(file.LocalFileName);
messages.Add("File uploaded as " + fi.FullName + " (" + fi.Length + " bytes)");
}
return messages;
}
else
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid Request!");
throw new HttpResponseException(response);
}
}
}
public class MyStreamProvider : MultipartFormDataStreamProvider
{
public MyStreamProvider(string uploadPath)
: base(uploadPath)
{
}
public override string GetLocalFileName(HttpContentHeaders headers)
{
string fileName = headers.ContentDisposition.FileName;
if (string.IsNullOrWhiteSpace(fileName))
{
fileName = Guid.NewGuid().ToString() + ".xls";
}
return fileName.Replace("\"", string.Empty);
}
}
我在教程中找到了这段代码,所以我不是一个值得信赖的代码。 所以在这里我将文件写入文件夹。因为mysreamprovider,我可以获得与我首次在GUI中添加的文件相同的文件名。我还添加了结尾&#34; .xls&#34;因为我的程序只处理excel文件。因此我在GUI中为输入添加了一些验证,以便我知道添加的文件是excel文件。