Asp.Net Core WEB API ошибка 404 вызова метода - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь создать дополнительный метод Get для веб-API, но возвращаемое значение равно 404 (метод не найден).

В моих API до Core я создавал такие методы, как:

[HttpGet]
[Route("api/MyNewMethodName")]
public object MyNewMethodName(string parameter1)
{}

И для вызова:

myURL/api/MyNewMethodName?parameter1=somestring

В моем определении контроллера у меня есть:

[Produces("application/json")]
[Route("api/MyController")]
public class MyController : Controller

Для точно некоторого кода я получаю ошибку 404.

Что не так, пожалуйста?

1 Ответ

0 голосов
/ 13 мая 2018

Ваш контроллер имеет определенный маршрут. Так что для вашего метода действия это будет префикс маршрута, определенный для контроллера + шаблон маршрута для метода действия. Это означает, что с вашим текущим кодом он будет работать для запроса ниже

yourBaseUrl/api/MyController/api/MyNewMethodName?parameter1=somestring

Здесь часть api/MyController - из определения маршрута на уровне контроллера, а часть api/MyNewMethodName - из уровня метода действия.

Исправьте префикс маршрута на уровне контроллера или метода по мере необходимости. Например, если вы хотите, чтобы ваш метод действия отвечал на /api/MyNewMethodName?parameter1=somestring. Просто удалите декоратор Route на уровне контроллера.

[Produces("application/json")]
public class MyController : Controller
{
    [HttpGet]
    [Route("api/MyNewMethodName")]
    public object MyNewMethodName(string parameter1)
    {
        return "Sample dummy response : "+parameter1;
    }
}

Имейте в виду, что удаление маршрутизации на уровне контроллера может нарушить маршруты к другим методам действий в этом контроллере. Если вы хотите сохранить существующие маршруты как есть (с атрибутами маршрута уровня контроллера), вы можете обновить шаблон маршрута уровня действия, чтобы начать с /

[Produces("application/json")]
[Route("api/MyController")]
public class MyController : Controller
{
    [HttpGet]
    [Route("/api/MyNewMethodName")]
    public object MyNewMethodName(string parameter1)
    {
        return "Some test"+parameter1;
    }
    [HttpGet]
    [Route("SecondMethod")]
    public object SecondMethod(string parameter1)
    {
        return "SecondMethod : "+parameter1;
    }
}
...