1

使用できます

AddUriPathExtensionMapping("json", "application/json");

以下に示すように、メディア タイプを uri の一部として指定できるようにするには

http://localhost/products.json

Content-Type ヘッダーを指定しなくても、この uri に投稿できるように WebApi を取得するにはどうすればよいですか。WebApi で拡張機能を使用して Content-Type を判断したいと考えています。

4

2 に答える 2

2

質問: Uri で Content-Type を指定する理由は何ですか? Accept通常、Uri でメディア タイプを指定するのは、GET のようなシナリオで、ユーザーがヘッダーを提供する方法がない場合です。たとえば、ブラウザーのアドレス バーに入力し/products.jsonたり/products.xml、結果を表示したりできます。

ヘッダーを使用してリクエストを行うことができる他のすべてのシナリオでは、通常の方法で送信する必要があります。あなたのシナリオをもっと説明してもらえますか?

編集

実際に GET リクエストを探している場合は、次の例のようにすることができます。

  • 以下のようにルートを登録します。

        config.Routes.MapHttpRoute(
                name: "DefaultApiWithExtension2",
                routeTemplate: "api/{controller}/{id}.{ext}"
            );
    
        config.Routes.MapHttpRoute(
            name: "DefaultApiWithExtension1",
            routeTemplate: "api/{controller}.{ext}");
    
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    
        config.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "application/xml");
        config.Formatters.JsonFormatter.AddUriPathExtensionMapping("json", "application/json");
    
  • .アプリケーションが IIS でホストされている場合、URL で文字を使用するとエラーが表示されます。これを解決するには、Web.Config で次の設定を行います。
    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />

于 2013-06-13T00:14:30.987 に答える
0

ApiController に到達する前に、URI を解析して Content-Type ヘッダーを設定するサーバー側メッセージ ハンドラーを追加できます。

于 2013-06-13T03:08:08.997 に答える