C# 使用RestSharp将文件从MVC控制器上载到Web API

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)

我的web应用程序的一个功能是用户能够上传降价文件。我想将文件从
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
。这可以解决它。