2

新しい Web API では、次のようなキャッチ オール ルートを使用できますか

routes.MapHttpRoute(
   name: "name",
   routeTemplate: "api/{*id}",
   defaults: new { controller = "mycontroller", id = RouteParameter.Optional}
);

PUTメソッドで?通常、PUT メソッドは次のように使用されます。

public HttpResponseMessage Put(string id, string body)
{
    ...
}

bodyPUT リクエストの本文です。ただし、すべてのルートをキャッチすると、これは機能していないようで、エラーが発生します

{
    "ExceptionType":"System.ArgumentException",
    "Message":":"No 'MediaTypeFormatter' is available to read an object of type 'String' with the media type ''undefined''.",
    "StackTrace":"..."
}

私のputメソッドがどのように見えるか

public HttpResponseMessage Put(string id)
{
    ...
}

ルート情報が id パラメータに渡される catch all ルートを使用できるはずであり、応答オブジェクトから本文にアクセスできる必要があると考えています。何か案は?

4

1 に答える 1

2

ルートは問題ないと思います。そのように書きたい場合は、そのルートで問題ないはずです。MediaTypeFormatterリクエストで送信する Content-Type に適切なものがない場合、そのエラーが発生します。たとえば、を使用しJsonMediaTypeFormatterている場合は、送信していることを確認する必要があります

Content-Type: application/json

あなたの要求で。あなたのようには見えません。

于 2012-05-18T12:15:21.203 に答える