問題: Webクライアントを使用して別のエンドポイントにHttpPostedFileBase(メモリ上でのみ使用可能、ディスク上にはありません)を投稿できますか?私が試した何Webクライアントを使用してストリームからmultipart/form-dataファイルを投稿する
:
を、私は、次のコントローラを持って、私たちはフロントエンドからのファイルに掲載されており、それがファイルのパラメータにバインドします。
私は そのコントローラは、このようになります(ので、我々はクライアントから直接投稿することはできません)公に利用できない別のアプリケーションにこの要求を渡す必要がありpublic class HomeController : Controller
{
[System.Web.Http.HttpPost]
public async Task<string> Index(HttpPostedFileBase file)
{
//file is not null here, everything works as it should.
//Here im preparing a multipart/form-data request to my api endpoint
var fileStreamContent = new StreamContent(file.InputStream);
using (var client = new HttpClient())
using (var formData = new MultipartFormDataContent())
{
formData.Add(fileStreamContent);
var response = await client.PostAsync("http://restapi.dev/api/files/add", formData);
var result = await response.Content.ReadAsStringAsync();
return result;
}
}
}
:
[RoutePrefix("api/files")]
public class FilesController : ApiController
{
[HttpPost]
[Route("add")]
public async Task<HttpResponseMessage> Add(HttpPostedFileBase file)
{
//This is the problem, file is always null when I post from my backend.
var files = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files[0] : null;
return Request.CreateResponse(HttpStatusCode.OK);
}
}
file
は常にありますnullなのでfiles
です。 私は何が欠けていますか? Postmanを使用してAPIエンドポイントに直接投稿すると機能します。だから私は私のHomeController
で何か間違っていることを推測していますか?
これは他のサーバーに簡単なプロキシですか?最初のコントローラとは何ですか? MVC/WebAPI?それはWebAPIですか? – spender
まあまあ、最初のコントローラはMVCコントローラで、もう1つはWebAPIコントローラです。問題を簡単に解決できるようにするには、両方のタイプを変更することができます。理想的には、私はちょうど私のAPIコントローラに直接最初の要求をパススルーしたいと思います。 – JOSEFtw