В WCF REST я могу определить строгий шаблон URL.ASP.NET MVC Web API 4 - сложные шаблоны URL-адресов
В ASP.NET MVC Web API 4 У меня проблема.
Я зарегистрировал маршрут в обычном режиме:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Мой контроллер иметь этот метод:
// POST /api/documents
public HttpResponseMessage<Document> Post(Document document)
{...}
Если я отправить POST-запрос с этим URL «http://servername.com: 53835/api/Documents/"(параметр" 1337 "не должен быть там), он вызывает метод Post (Document document). Но я хочу, чтобы в этом случае инфраструктура обнаружила ошибку. (например, «Нет API-вызова, найденного для этого запроса»).
С REST WCF я мог настроить это строго ... Я не настолько в восторге от этой «конвенции по конфигурации» ...
И как я могу сделать больше Complexe шаблоны URL?
- Я хочу что-то вроде этого:
АНИ для GET-запроса с этим URL-шаблон: "http://servername.com:53835/api/Documents/1337" для получения определенного документа-объекта (содержит метаданные, такие как дата создания, создатель и т. д.).
Другой GET-запрос должен получить сам файл (в виде потока), с этим URL: http://servername.com:53835/api/Documents/1337/File
Как я могу определить эту разницу? ГЭТ-метод для получения документа-объекта выглядит следующим образом:
// GET /api/documents/5
public HttpResponseMessage<Document> Get(int id)
{...}
Как я могу определить отдельный метод с теми же параметрами (в данном случае «ид»)? Нужно ли настраивать шаблон URL с атрибутами метода, например, в WCF REST-Projects?
я могу изменить маршрутизацию для {действия} заполнителем, как это:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{mandant}/{controller}/{id}/{action}",
defaults: new { mandant = "profile", id = RouteParameter.Optional, action = RouteParameter .Optional}
);
И тогда я могу использовать метод атрибутов [ActionName ("Файл")] и [AcceptVerbs ("GET")] лежат так:
[ActionName("File")]
[AcceptVerbs("GET")]
public HttpResponseMessage FileDownload(int id)
Тогда я могу назвать: "http://servername.com:53835/api/Documents/1337/File", чтобы получить файл. Но что, если я хочу больше этих «действий»?
- Более сложным вариантом использования будет URL-адрес с повторяющимися частями. Что-то вроде: (в этом случае у меня есть характеристика какого-то элемента.Количество это характеристики должны быть переменными)
http://servername.com:53835/api/Documents/characteristic_1/characteristic_2/characteristic_3 http://servername.com:53835/api/Documents/characteristic_1/characteristic_2
часть с характеристиками должна быть динамической/переменными.
Что такое ActionFilter? Я нашел не очень много о WebApi-ActionFilter. Что я могу с ними сделать? – user437899