2015-11-14 3 views
2

мне нужно использовать несколько POST-запросов в веб-API, но получаю сообщение об ошибке: «было обнаружено несколько действий, которые соответствуют запросу ...»Multiple POST-запрос в Web API

У меня есть 2 POST-запросов в мой контроллер:

public void PostStart([FromBody]string value) 
{ 
    CookieHeaderValue cookie = Request.Headers.GetCookies("user").FirstOrDefault(); 
    ... 
} 


public void PostLogin([FromBody]string value) 
{ 
    CookieHeaderValue cookie = Request.Headers.GetCookies("user").FirstOrDefault(); 
    ... 
} 

Мой файл маршрут выглядит следующим образом в настоящее время:

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "apistart", 
     routeTemplate: "Home/api/values/start/{id}", 
     defaults: new { action = "PostStart", id = RouteParameter.Optional } 
    ); 

    config.Routes.MapHttpRoute(
     name: "apilogin", 
     routeTemplate: "Home/api/values/login/{id}", 
     defaults: new { action = "PostLogin", id = RouteParameter.Optional } 
    ); 

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

Если я удалю на запросах от контроллера, все работает отлично, так что мои маршруты кажутся действительными, но когда оба запрашивает ar e, маршрутизатор не может найти правильный.

Любые мысли? Я пытался использовать настройки уже маршрут по умолчанию другой, но это ничего не меняет:

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

ответ

0

Вы можете использовать [HttpPost] атрибут, чтобы указать метод запроса:

[HttpPost] 
public void Start([FromBody]string value) 
{ 
    CookieHeaderValue cookie = Request.Headers.GetCookies("user").FirstOrDefault(); 
    ... 
} 

[HttpPost] 
public void Login([FromBody]string value) 
{ 
    CookieHeaderValue cookie = Request.Headers.GetCookies("user").FirstOrDefault(); 
    ... 
} 

Это будет позволяет использовать столько почтовых действий, как вы хотите с помощью правила маршрута по умолчанию действия на основе.

routes.MapHttpRoute(
    name: "ActionApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 
+0

Спасибо, это помогло, но только с тремя маршрутами. По умолчанию это невозможно. – Stivin

0

Вы должны использовать RouteAttribute, чтобы заставить его работать:

[Route("start")] 
public void PostStart([FromBody]string value) 
{ 
    CookieHeaderValue cookie = Request.Headers.GetCookies("user").FirstOrDefault(); 
    ... 
} 

[Route("login")] 
public void PostLogin([FromBody]string value) 
{ 
    CookieHeaderValue cookie = Request.Headers.GetCookies("user").FirstOrDefault(); 
    ... 
} 

WebAPI не принимает во внимание имя методы, только первое слово для решения метода http. Вот почему у вас есть ошибка, которая говорит о «Множественных действиях ...» - есть два действия, которые могут обрабатывать запрос POST.

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