実際、私の質問は短いです。
ASP.NET Web API POST または PUT から HttpPostedFile を取得するにはどうすればよいですか?
Request.Header、Request.Content、Request.Properties などの Request からさまざまな情報を取得できることがわかりました。渡したファイルはどこにありますか? また、そこから HttpPostedFile を作成するにはどうすればよいですか?
前もって感謝します!
実際、私の質問は短いです。
ASP.NET Web API POST または PUT から HttpPostedFile を取得するにはどうすればよいですか?
Request.Header、Request.Content、Request.Properties などの Request からさまざまな情報を取得できることがわかりました。渡したファイルはどこにありますか? また、そこから HttpPostedFile を作成するにはどうすればよいですか?
前もって感謝します!
Henrik Nielsen の素晴らしい記事をチェックして、マルチパート コンテンツを投稿する (つまり、ファイルを含むフォームを投稿する)
更新:マルチパート コンテンツのないファイルを受信するコントローラーの簡単なコードを追加します。
コントローラがファイルを受信するだけでよい場合 (つまり、マルチパート コンテンツがない場合)、上記のようなことができます。要求にはファイル バイナリのみが含まれ、ファイル名は URL 内で渡されます。
public Task<HttpResponseMessage> Post([FromUri]string filename)
{
Guid uploadedFile = Guid.NewGuid();
Task<HttpResponseMessage> task = Request.Content.ReadAsStreamAsync().ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
throw new HttpResponseException(HttpStatusCode.InternalServerError);
try
{
using (Stream stream = t.Result)
{
//TODO: Write the stream to file system / db as you need
}
}
catch (Exception e)
{
Object o = e;
return Request.CreateResponse(HttpStatusCode.InternalServerError, e.GetBaseException().Message);
}
return Request.CreateResponse(HttpStatusCode.Created, uploadedFile.ToString());
});
return task;
}
残念ながら、あなたの短い質問には短い答えがありません。
ASP.NET Web API は、ASP.NET MVC が HTTP の一部 (この場合は HttpPostedFile) を抽象化する一方で、HTTP の驚異にあなたをさらします。
少し背景があります:
ファイルが関係する HTTP ポストには、通常、マルチパートフォーム データ コンテンツが含まれます。これは、異なる種類のコンテンツ タイプが混在していることを意味します。通常の形式のデータは、formurlencoded を使用して送信され、ファイルはアプリケーション/オクテント ストリームで送信されます。
したがって、Web API では、次のように言うだけです。
var contents = message.Content.ReadAsMultipartAsync(); // message is HttpRequestMessage
コンテンツの 1 つにファイルが含まれます。