Ответ 1
Да, вы можете достичь этого с помощью 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
, так как эти методы являются методами расширения, а intellisense не увидит их по умолчанию.
Помните, что в этом примере вам все равно придется выдать запрос с соответствующим типом содержимого. Однако, если вы хотите, чтобы они были напрямую доступны через адресную строку браузера, вы можете перейти к "text/html".
Я написал сообщение в блоге обо всем, что некоторое время назад - что должно быть полезно, и введем вас в подробности http://www.strathweb.com/2012/04/different-mediatypeformatters-for-same-mediaheadervalue-in-asp-net-web-api/