C# 使用RestSharp将文件从MVC控制器上载到Web API
我的web应用程序的一个功能是用户能够上传降价文件。我想将文件从C# 使用RestSharp将文件从MVC控制器上载到Web API,c#,asp.net-mvc,asp.net-mvc-4,file-upload,C#,Asp.net Mvc,Asp.net Mvc 4,File Upload,我的web应用程序的一个功能是用户能够上传降价文件。我想将文件从MVC控制器传递到webapi控制器,然后webapi将标记文件保存在特定的项目文件夹中。我想知道这是否可能。如果是,如何做 因此,我想让MVC控制器获取一个HttpPostedFileBase参数,然后使用RestSharp的request.AddFile()将文件发送到WebAPI控制器 MVC控制器 [HttpPost] public ActionResult Upload(HttpPostedFileBase upload)
MVC
控制器传递到webapi
控制器,然后webapi
将标记文件保存在特定的项目文件夹中。我想知道这是否可能。如果是,如何做
因此,我想让MVC
控制器获取一个HttpPostedFileBase
参数,然后使用RestSharp的request.AddFile()
将文件发送到WebAPI
控制器
MVC控制器
[HttpPost]
public ActionResult Upload(HttpPostedFileBase upload)
{
var client = new RestClient("http://localhost:4000/api/beneficiaries");
var request = new RestRequest(Method.POST);
//todo send file to web API
var response = client.Execute(request);
return View();
}
即使我没有测试过它,它也应该可以工作:
request.AddFile(upload.FileName, upload.InputStream.CopyTo, upload.ContentType);
根据api目标方法的不同,如果需要随其发送一些参数,则可能需要:
request.AddFile(upload.FileName, upload.InputStream.CopyTo);
request.AddHeader("Content-Type", "multipart/form-data");
request.AddParameter("filename", upload.FileName, ParameterType.RequestBody);
request.AddParameter("otherParameter", "Something here...", ParameterType.RequestBody);
即使我没有测试过它,它也应该可以工作:
request.AddFile(upload.FileName, upload.InputStream.CopyTo, upload.ContentType);
根据api目标方法的不同,如果需要随其发送一些参数,则可能需要:
request.AddFile(upload.FileName, upload.InputStream.CopyTo);
request.AddHeader("Content-Type", "multipart/form-data");
request.AddParameter("filename", upload.FileName, ParameterType.RequestBody);
request.AddParameter("otherParameter", "Something here...", ParameterType.RequestBody);
我尝试了这个,得到了一个
InnerExceptionError
:在var response=client.Execute(请求)上,在写入所有字节之前无法关闭流代码>在这种情况下,可能需要复制流,而无法重用它。您可以在创建RestClient
实例之前通过调用:var targetStream=new MemoryStream()
创建一个新的内存流。然后将上载文件流复制到内存流:Upload.InputStream.CopyTo(targetStream)
。您可能需要将目标流“倒带”回开头:targetStream.Seek(0,请参见korigin.Begin)
。现在,在执行AddFile
时,使用targetStream.CopyTo
而不是upload.InputStream.CopyTo
。这可以解决它。我尝试了这个,我得到了一个InnerExceptionError
:在var response=client.Execute(请求)上,在写入所有字节之前无法关闭流代码>在这种情况下,可能需要复制流,而无法重用它。您可以在创建RestClient
实例之前通过调用:var targetStream=new MemoryStream()
创建一个新的内存流。然后将上载文件流复制到内存流:Upload.InputStream.CopyTo(targetStream)
。您可能需要将目标流“倒带”回开头:targetStream.Seek(0,请参见korigin.Begin)
。现在,在执行AddFile
时,使用targetStream.CopyTo
而不是upload.InputStream.CopyTo
。这可以解决它。