Веб-интерфейс Было найдено несколько действий, соответствующих запросу. Как добавить пользовательскую конечную точку - PullRequest
0 голосов
/ 02 апреля 2019

У меня отдыхает контроллер Web Api с CRUD. И мне нужно добавить пользовательскую конечную точку POST:

public class TherapistController : ApiController
    {
       public IHttpActionResult Post(TherapistModel therapistModel)
        {
           return Ok(therapist);
        }

        public IHttpActionResult SendConfirmationEmail(TherapistModel therapistModel)
        {
            return Ok(therapist);
        }
    }

Но в этом случае у меня возникает ошибка: «Найдено несколько действий, соответствующих запросу».

Вот WebApiConfig:

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

Вот мои вызовы API:

axios({
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            url: '/internal/api/therapist/',
            data: this.state.newTherapist
        });

 axios({
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            url: '/internal/api/Therapist/SendConfirmationEmail/',
            data: this.state.newTherapist
        });

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Я бы порекомендовал использовать маршрутизацию атрибутов в тех случаях, когда у вас есть методы Multiple Action для одного и того же глагола http.

Ниже будет работать,

Добавьте эту строку над всеми определенными маршрутами в методе регистрации

config.MapHttpAttributeRoutes ();// Включаем маршруты маршрутизации атрибутов Web API

и определяем маршруты как атрибуты ..

[RoutePrefix("internal/api/therapist")]
public class TherapistController : ApiController
{
    [HttpPost]
    [Route("Post/{therapistModel}")]
    public IHttpActionResult Post(TherapistModel therapistModel)
    {
        return Ok();
    }

    [HttpPost]
    [Route("Email/{therapistModel}")]
    public IHttpActionResult SendConfirmationEmail(TherapistModel therapistModel)
    {
        return Ok();
    }
}

В вашем коде вызова JS ..

internal / api / therapist / post/ {yourparameter}

и

internal / api / therapist / email / {yourparameter} .... для вызова вышеуказанных методов соответственно

0 голосов
/ 02 апреля 2019
axios({
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        url: '/internal/api/therapist/', // remove '/' from last form both url
        data: this.state.newTherapist
    });
...