26

次のwebapiconfigがあるとします。

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

そしてこのコントローラー。

  public class ProductsController : ApiController
    {
         Product[] _products = new Product[] 
        { 
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, 
            new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, 
            new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
        };

        public IEnumerable<Product> GetAllProducts()
        {
            return _products;
        }
    }

URLhttp://localhost/api/Productsを使用して、XML形式の製品のリストを取得します。

私がやりたいのは、リクエストに基づいてjsonまたはxmlのいずれかを返すオプションがあります。したがって、jsonの場合は次のようになります。

http://localhost/api/Products.json

XMLの場合は、次のようになります。

http://localhost/api/Products.xml

同じく;

http://localhost/api/Products.json/1/
http://localhost/api/Products.xml/1/

これは可能ですか?この機能をどのように実現しますか?

別の方法は次のようになります。

http://localhost/api/json/Products/
4

1 に答える 1

38

はい、あなたはそれを達成することができますAddUriPathExtensionMapping

次のようなルートを作成できます。

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

routes.MapHttpRoute(
  name: "Api UriPathExtension ID",
  routeTemplate: "api/{controller}/{id}.{extension}",
  defaults: new { id = RouteParameter.Optional, extension = RouteParameter.Optional }
); 

次に、フォーマッタを拡張する必要があります。

  config.Formatters.JsonFormatter.AddUriPathExtensionMapping("json", "application/json");
  config.Formatters.XmlFormatter.AddUriPathExtensionMapping("xml", "text/xml");

System.Net.Http.Formattingこれらのメソッドは拡張メソッドであり、インテリセンスはデフォルトではそれらを認識しないため、必ずへの参照を追加してください。

この例では、適切なコンテンツタイプを使用してリクエストを発行する必要があることに注意してください。ただし、これらをブラウザのアドレスバーから直接利用できるようにする場合は、「text/html」にマップできます。

私はしばらく前にブログ投稿を書きました-これは役に立ち、詳細を紹介するはずですhttp://www.strathweb.com/2012/04/different-mediatypeformatters-for-same-mediaheadervalue-in-asp- net-web-api /

于 2012-10-24T16:36:54.330 に答える