1

.Net WebApi が要求の contentType を自動的に検出せず、自動バインディングを実行しないのはなぜですか?

contentType を通知せずにリクエストを行うと、HTTP 500 エラーが発生します。

No MediaTypeFormatter is available to read an object of type 'ExampleObject' from content with media type ''undefined''.

着信データを検出して自動的にバインドしようとしないのはなぜですか?

別のケース:

Content-Type: application/x-www-form-urlencoded送信するこの要求JSON:

User-Agent: Fiddler
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Host: localhost:10329
Content-Length: 42

Request Body:
{"Name":"qq","Email":"ww","Message":"ee"}:

私のアクションは、オブジェクト パラメータで JSON 要求データを自動的に検出しません。

public void Create(ExampleObject example) //example is null
{
{

オブジェクトを null にする代わりに、なぜ解決しようとしないのでしょうか?

次に、バインディングが発生するために、 で送信する必要がありますContent-Type: application/json

.Net WebAPI が要求データのタイプを検出し、自動バインディングを行うのが最善でしょうか? なぜこのようにしないのですか?

4

2 に答える 2

1

application / x-www-form-urlencodedは、x-www-form-urlencoded標準でデータを送信することを意味します。別の規格でデータを送信することはできません。

于 2012-08-12T20:59:04.090 に答える
1

あなたがしたいことは、サーバーから複数のフォーマットを受け入れることです。

http が機能する方法は、クライアントがサーバーにリソースを要求し、サーバーが理解できるコンテンツ タイプをサーバーに伝えることです。これは、クライアントがデコードできない応答を取得せず、サーバーはどの応答がクライアントにより適しているかを認識していることを意味します。たとえば、Web ブラウザーの場合、最も適切なコンテンツ タイプは text/html ですが、XML を取得する場合は、おそらくそれでも何かを行うことができます。したがって、次のようにリクエストします。

   accept: text/html, application/xml

これは、あなたが HTML を好むが、XML も理解していることを示しています

あなたの例では、クライアントが application/x-www-form-urlencoded を望んでいるが、JSON も処理できる場合は、リクエストを行うときに次のことを行う必要があります。

 accept: application/x-www-form-urlencoded, application/json

詳細については、http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html の Accept ヘッダーに関する HTTP 仕様を参照してください。

サーバーがクライアントに application/x-www-form-urlencoded を与える方法を認識できるように、新しいメディア タイプ フォーマッタを作成することもできます。これを行う方法の詳細については、このブログ投稿を参照してくださいhttp://www. strathweb.com/2012/04/rss-atom-mediatypeformatter-for-asp-net-webapi/

于 2012-08-12T22:19:56.890 に答える