4

実際、私の質問は短いです。

ASP.NET Web API POST または PUT から HttpPostedFile を取得するにはどうすればよいですか?

Request.Header、Request.Content、Request.Properties などの Request からさまざまな情報を取得できることがわかりました。渡したファイルはどこにありますか? また、そこから HttpPostedFile を作成するにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

6

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;
}
于 2012-05-26T11:53:34.330 に答える
5

残念ながら、あなたの短い質問には短い答えがありません。

ASP.NET Web API は、ASP.NET MVC が HTTP の一部 (この場合は HttpPostedFile) を抽象化する一方で、HTTP の驚異にあなたをさらします。

少し背景があります:

ファイルが関係する HTTP ポストには、通常、マルチパートフォーム データ コンテンツが含まれます。これは、異なる種類のコンテンツ タイプが混在していることを意味します。通常の形式のデータは、formurlencoded を使用して送信され、ファイルはアプリケーション/オクテント ストリームで送信されます。

したがって、Web API では、次のように言うだけです。

var contents = message.Content.ReadAsMultipartAsync(); // message is HttpRequestMessage

コンテンツの 1 つにファイルが含まれます。

于 2012-05-25T10:57:14.353 に答える