2017-10-30 1 views
1

私の.NET Core 2コントローラでは、次の操作を行います。アプリケーション/ x-www-form-urlencodedでそれはSwashbuckle.AspNetCore [FromForm] IFormCollection

[HttpPost("data/add/{formid}"] 
public void Add(int formid, [FromForm]IFormCollection formData) { 
    //do something 
} 

投稿されたすべてのデータを格納する必要があるAPIですので闊歩UIは、UIを使用してアクションを試すことができます: Swagger UI

しかし闊歩UIを作成しますボディとPOST:FORMDATA =フィールド1%3Dvalue1%26field2%3Dvalue2

私はそれがあることを期待:フィールド1 = VALUE1 &フィールド2 = value2の

OpenAPIの制限、またはSwaggerUIのバグですか?それとも、私が期待していることを得る方法がありますか?

答えて

0

IFormCollectionは動的辞書なので、Swaggerはルールを実質的に持たないため、それをどのように処理するかはわかりません。それだけでは、これはRESTベースのAPIで使用する必要があるものではないことを伝えるのに十分であるはずです。要点は、APIを自己文書化することです。つまり、一般的なデータダンプではなく、強く型付けされたパラメータとして必要な実際のものを受け入れる必要があります。言い換えれば

は、代わりに、のような何かを:DataClassはあなたが投稿しているフィールドの名前と一致するプロパティを持つ実際のクラスがある

public void Add(int formid, [FromForm]DataClass data) 

。強く型付けされたパラメータを使用しても、投稿はapplication/x-www-form-urlencodedとして除外されません。実際にIFormCollectionを使用する正当な理由はありません。

+0

返信いただきありがとうございます。まあ、キー/値のコレクションを持つクラスを作成し、それをapplication/x-www-form-urlencodedとして投稿することができます(RESTはapplication/jsonを使うべきではありません)。しかし、単にIFormCollectionはボックスからのものであり、ボックスから動作することができます –

関連する問題