0

MVC プロジェクトで Web API コントローラーを作成しました。このコントローラーに POST しようとすると、ファイルのダウンロードが開始されますが、その理由はわかりません。URL 経由で API コントローラーに移動した場合、またはフォーム ポスト経由で移動した場合に発生します。

これは、投稿を介してファイルをアップロードする非常に単純なシナリオです。

ここにコントローラーコードがあります。何か案は?

public class UploadController : ApiController
    {

        public async Task<List<string>> Post()
        {
            // Verify that this is an HTML Form file upload request
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            // Create a stream provider for setting up output streams that saves the output under c:\tmp\uploads
            // If you want full control over how the stream is saved then derive from MultipartFormDataStreamProvider
            // and override what you need.
            MultipartFormDataStreamProvider streamProvider = new MultipartFormDataStreamProvider("c:\\tmp\\");

             var task = await Request.Content.ReadAsMultipartAsync(streamProvider);

            return new List<string>();
        }

クライアントコードは次のとおりです。

<!DOCTYPE HTML>
<html>
<head>
    <title>HTML5 Multiple File Upload Sample</title>
</head>
<body>
    <form action="http://localhost:8080/api/upload" enctype="multipart/form-data" method="POST">
    What is your name?
    <input name="submitter" size="40" type="text"><br>
    What files are you uploading?
    <input name="data" type=file multiple>
    <br>
    <input type="submit" />
    </form>
</body>
</html>
4

1 に答える 1

4

この例をテストするために Internet Explorer を使用しているのではないでしょうか。しかし、このブラウザーは、サーバーが JSON を送信するときに常にダウンロードを要求します (ええ、IE はひどいものです。Web 開発を行うときは、実際の Web ブラウザーを使用してください)。コントローラー アクションは、IE がインラインで表示できない JSON を返し、それをクライアントに保存するように求めます。他に何を期待していたのかわからない?コントローラー アクションは空の配列を JSON として返します。ファイルをアップロードするための HTML フォームがあり、このファイルのアップロードの結果は、IE が処理方法を知らない空の JSON 配列です。

HTML クライアント フォームを使用している場合、おそらくこの API コントローラー アクションから HTML を返したいと思うでしょう。

于 2013-06-28T20:54:32.180 に答える