Я настроил приложение ASP.NET MVC5 для использования AttributeRouting для WebApi:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
}
}
У меня есть ApiController
следующим образом:
[RoutePrefix("api/v1/subjects")]
public class SubjectsController : ApiController
{
[Route("search")]
[HttpPost]
public SearchResultsViewModel Search(SearchCriteriaViewModel criteria)
{
//...
}
}
Я хотел бы создать URL-адрес моего действия контроллера WebApi без указания явного имени маршрута.
Согласно этой странице в CodePlex, все маршруты MVC имеют четкое имя, даже если оно не указано.
При отсутствии указанного имени маршрута веб-API будет генерировать имя маршрута по умолчанию. Если есть только один маршрут атрибута для имя действия на конкретном контроллере, имя маршрута примет form "ControllerName.ActionName". Если есть несколько атрибутов с тем же именем действия на этом контроллере, суффикс добавляется к различать маршруты: "Customer.Get1", "Customer.Get2".
В ASP.NET он не говорит точно, что такое соглашение об именах по умолчанию, но оно указывает, что каждый маршрут имеет имя.
В веб-API каждый маршрут имеет имя. Имена маршрутов полезны для генерируя ссылки, чтобы вы могли включить ссылку в ответ HTTP.
На основе этих ресурсов и ответа qaru.site/info/263988/... мне показалось, что следующее приведет к URL-адресу моего маршрута WebApi:
@(Url.RouteUrl("Subjects.Search"))
Однако это вызывает ошибку:
Маршрут с именем "Subjects.Search" не найден на маршруте коллекция.
Я пробовал несколько других вариантов, основанных на других ответах, найденных в StackOverflow, но с успехом.
@(Url.Action("Search", "Subjects", new { httproute = "" }))
@(Url.HttpRouteUrl("Search.Subjects", new {}))
Фактически даже предоставление имени маршрута в атрибуте работает только с:
@(Url.HttpRouteUrl("Search.Subjects", new {}))
Где "Search.Subjects" указывается как имя маршрута в атрибуте Route.
Я не хочу, чтобы меня указывали уникальное имя для моих маршрутов.
Как я могу создать URL-адрес для моего контроллера контроллера WebApi без явного указания имени маршрута в атрибуте Route?
Возможно ли, что схема именования маршрутов по умолчанию изменилась или неправильно зарегистрирована в CodePlex?
Есть ли у кого-нибудь представление о правильном способе получения URL-адреса для маршрута, который был настроен с помощью AttributeRouting?