2013-10-15 4 views
0

у меня есть контроллер, который выглядит, как этотWebAPI Помощь страница показывает различные имена, чем имена контроллеров

[HttpGet] 
    [ActionName("Ping")] 
    public bool Ping() { return true; } 

    [HttpPost] 
    [ActionName("Test")] 
    public string Test([FromBody] Testing form) 
    { 
     return form.Email + " " + form.Password; 
    } 

и при запуске страницы справки показывает, что это:

GET апи/Test
POST апи/Тест

Маршрутизация по умолчанию соответствует шаблону, поэтому не уверен, почему он не выбирает правильные имена даже после размещения аннотации «ActionName».

Любая помощь будет по-настоящему оценена.

================================================================================================================================== ===================
ОТВЕТ: Как предложил Дэвид Л., проблема была в маршрутизации. Я прочитал его предложили ссылку и добавлен новый API маршрутизации, который содержал «действие» на него, и это выглядит следующим образом:

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

С этим актуалистами отображает соответствующий API, используя правильное имя аннотаций.

ответ

1

Имя_экземпляра является частью пространства имен System.Web.Mvc. Это, скорее всего, игнорируется WebAPI. WebAPI будет отдавать предпочтение вашим методам Get и Post в первую очередь.

Если вы знакомы с ASP.NET MVC, маршрутизация веб-API очень похожа на на маршрутизацию MVC. Основное различие заключается в том, что Web API использует метод HTTP , а не путь URI, чтобы выбрать действие. Вы также можете использовать маршрутизацию MVC в веб-API. Эта статья не предполагает никаких знаний о ASP.NET MVC .

Вы можете найти более подробную информацию о маршрутизации WebAPI, а также выше цитата, по адресу: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

EDIT:

Чтобы подчеркнуть то, что страницы помощи пытаются сказать вам, апи корень вашего разоблаченного api. Тест - это маршрут контроллера. Он всегда будет пытаться идентифицировать на этом этапе с помощью глагола REST, в данном случае GET и POST, что и отображается.

+0

Я использую маршрутизацию по умолчанию (это означает, что я не изменил тот, который поставляется с шаблоном). Это причина того, что он не работает? Если да, то знаете ли вы, что такое новая маршрутизация? Постскриптум Я сейчас читаю вашу ссылку - большое спасибо –

+0

Чтобы уточнить, WebAPI использует маршрутизацию RESTful, что означает, что он идентифицирует ваши имена методов по их атрибуту REST. Вы должны переименовать Ping для Get и Test to Post. Это согласуется с маршрутизацией, поскольку оно сопоставляется с ключевым словом REST. –

+0

Фактически, добавив новый Маршрут, который имеет {действие} как часть его, он теперь показывает правильное имя «Имя_действия». На самом деле это показывает двойной, но я думаю, мне просто нужно читать дальше: -) Еще раз спасибо. –

Смежные вопросы