【发布时间】:2017-12-16 00:21:54
【问题描述】:
我的解决方案有两个项目,一个是 ASP.NET MVC(仅作为 UI)和 ASP.NET Web API(作为 Restful 服务)。我想将上传的文件从 MVC 项目发送到 Web API,并且在部署时每个应用程序都将托管在不同的服务器上,因此我需要将所有文件集中在 Web API 服务器中。我需要帮助来比较两个选项(性能方面):
1- 将上传的文件从 MVC 操作发送到 Web API Post 操作,如下所示:
在 MVC 项目中:
[HttpPost]
public ActionResult UploadProfilePicture(HttpPostedFileBase file)
{
using (var client = new HttpClient())
{
using (var content = new MultipartFormDataContent())
{
byte[] Bytes = new byte[file.InputStream.Length + 1];
file.InputStream.Read(Bytes, 0, Bytes.Length);
var fileContent = new ByteArrayContent(Bytes);
fileContent.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = file.FileName };
content.Add(fileContent);
var requestUri = "http://localhost:1963/api/upload";
var result = client.PostAsync(requestUri, content).Result;
if (result.StatusCode == System.Net.HttpStatusCode.Created)
{
List<string> m = result.Content.ReadAsAsync<List<string>>().Result;
ViewBag.Success = m.FirstOrDefault();
}
else
{
ViewBag.Failed = "Failed !" + result.Content.ToString();
}
}
}
return View();
}
在 Web API 项目中:
public HttpResponseMessage Post()
{
HttpResponseMessage result = null;
var httpRequest = HttpContext.Current.Request;
if (httpRequest.Files.Count > 0)
{
var docfiles = new List<string>();
foreach (string file in httpRequest.Files)
{
var postedFile = httpRequest.Files[file];
var filePath = HttpContext.Current.Server.MapPath("~/" + postedFile.FileName);
postedFile.SaveAs(filePath);
docfiles.Add(filePath);
}
result = Request.CreateResponse(HttpStatusCode.Created, docfiles);
}
else
{
result = Request.CreateResponse(HttpStatusCode.BadRequest);
}
return result;
}
2- 将上传的文件从 MVC 操作发送到 Web API 服务器,如下所示:
System.IO.File.Copy("sourcePath in MVC server", "\\machinename\share folder path");
什么是最好的表现?
【问题讨论】:
-
看起来你已经尝试了这两种方法。哪个更快?
标签: c# asp.net-mvc asp.net-web-api