1

MVC4でUriPathExtensionMappingを使用するにはどうすればよいですか?フォーマッターに次のようなマッピングを追加しました。

MediaTypeMappings.Add(new UriPathExtensionMapping("json", new MediaTypeHeaderValue("application/json"))

ただし、次のような動詞を追加しない限り、ルートで拡張機能を使用することはできません。

routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}.{extension}"

        );

次に、目的のメディアタイプを認識しますが、アクションのパラメーターとして「拡張」も期待し始めます。例:

    public object Get(string extension)
    {
    }

ただの代わりに:

    public object Get()
    {
    }

どうすればこれを解決できますか?

ありがとう!

4

2 に答える 2

0

この問題に気付いたかどうかは覚えていませんが、次のように拡張機能のデフォルト値を明示的に指定したことが原因である可能性があります。

var rF = routes.MapHttpRoute(
    name: "DefaultApi.v1.format",
    routeTemplate: "api/1/{controller}/{action}.{format}/{*id}",
    defaults: new { id = RouteParameter.Optional, format = "json", version = 1 }
);

* 。format = "json"で始まる行に注意してくださいdefaults

idまた、のような末尾のパラメータを持つリクエストでは、これが機能しない場合があることにも気づきました~/api/1/values/get.json/4

于 2012-05-02T13:11:12.470 に答える
0

この問題を再現することはできません。

UriPathExtensionMappingを使用するには、上記のように、ルートで{controller}。{ext}を指定する必要があります。{controller}のみを指定し、uriが〜/ home.jsonのように見える場合、コントローラートークンはhome.jsonにマップされますが、これはおそらく意図したものではありません。

ただし、アクションで「拡張」パラメーターを要求する必要はありません。この問題が引き続き発生する場合は、コントローラー、ルート、カスタムフォーマッターで設定された構成を含む、再現全体を投稿できますか?ありがとうございました。

于 2012-03-08T07:09:18.877 に答える