web-dev-qa-db-ja.com

無効な「HttpContent」インスタンスが提供されました。 「境界」パラメータを持つ「マルチパート」コンテンツタイプヘッダーがありません

UIからアップロードされたファイルを受け入れるpostメソッドを持つWeb APIを書いています。

public async Task<List<string>> PostAsync()
    {

        if (Request.Content.IsMimeMultipartContent("form-data"))
        {
            string uploadPath = HttpContext.Current.Server.MapPath("~/uploads");

            var streamProvider = new MyStreamProvider(uploadPath);

            await Request.Content.ReadAsMultipartAsync(streamProvider);

            return streamProvider.FileData
                .Select(file => new FileInfo(file.LocalFileName))
                .Select(fi => "File uploaded as " + fi.FullName + " (" + fi.Length + " bytes)")
                .ToList();
        }
        else
        {
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid Request!");
            throw new HttpResponseException(response);
        }
    }

次に、上記のアクションに郵便配達員によるリクエストを投稿します。 content-typeヘッダーをmultipart/form-dataに設定しましたが、アクションの実行中にエラーが発生しました。ここにエラーメッセージ本文があります:

"無効な 'HttpContent'インスタンスが提供されています。'boundary 'パラメーターを持つ' multipart 'content-typeヘッダーがありません。\ r\nパラメーター名:content"

郵便配達員のヘッダーに行きましたが、リクエストヘッダーのcontent-typeがapplication-jsonに設定されていることがわかりました。

Postman screenshot

誰か私を助けてくれますか?

16
Hamid

Json形式の応答ヘッダーを探していますが、これは問題ありません。

あなたの本当の問題は郵便配達員のリクエストにあるので、リクエストヘッダーから 'Content-Type:multipart/form-data'エントリーを削除してください。 ファイルをフォームデータとしてアップロードし、リクエストを送信するだけで十分です

Content-Typeを手動で設定した場合とそうでない場合の違いを見てください。 enter image description hereenter image description here

コンテンツタイプのみを設定するため、Postmanはコンテンツタイプと境界の両方を設定することを知っています

12
Popa Andrei

First:Postmanには、ファイルベースのリクエストの処理にバグがあります。

これをWebApiConfig.csに追加してみてください。うまくいきました:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
0
Ramy M. Mousa