404 при вызове ASP.Net Core API - PullRequest
       65

404 при вызове ASP.Net Core API

1 голос
/ 03 октября 2019

У меня есть приложение ASP.Net Core MVC с контроллером Web API, я думаю, что предоставил правильные маршруты и все, но я все еще получаю ошибку 404 при вызове любого API контроллера в Postman

Вот как выглядит контроллер:

[Route("api/[controller]")]
    [ApiController]
    public class PetsController : Controller
    {
        private readonly IPetService _petService;

        public PetsController(IPetService _petService)
        {
            this._petService = _petService;
        }

        [HttpPost("Activation")]
        public async Task<IActionResult> Activation(Guid id)
        {
            var serviceResult = await _petService.DeletePet(id);
            return Ok(serviceResult);
        }

        [HttpGet("GetPet/{id}")]
        public async Task<IActionResult> GetPet(Guid id)
        {
            var serviceResult = await _petService.GetPetDetails(id);
            return Ok(serviceResult);
        }

        [HttpGet("GetPets/{pageSize}/{pageIndex}/{keyWord}")]
        public async Task<IActionResult> GetPets(int pageSize, int pageIndex, string keyWord)
        {
            var serviceResult = await _petService.GetPets(pageSize, pageIndex, keyWord);
            return Ok(serviceResult);
        }

        [HttpPost("SavePet")]
        public async Task<IActionResult> SavePet(PetDTO pet)
        {
            var serviceResult = (Object)null;

            if (!pet.Id.HasValue)
                serviceResult = await _petService.CreatePet(pet);
            else
                serviceResult = await _petService.EditPet(pet);

            return Ok(serviceResult);
        }

        [HttpGet("GetPetDues/{id}")]
        public async Task<IActionResult> GetPetDues(Guid id)
        {
            var serviceResult = await _petService.GetPetDues(id);
            return Ok(serviceResult);
        }

        [HttpGet("GetPetAppointments/{id}")]
        public async Task<IActionResult> GetPetAppointments(Guid id)
        {
            var serviceResult = await _petService.GetPetAppointments(id);
            return Ok(serviceResult);
        }

        [HttpGet("GetPetDiseases/{petId}")]
        public async Task<IActionResult> GetPetDiseases(Guid petId)
        {
            var serviceResult = await _petService.GetPetDiseases(petId);
            return Ok(serviceResult);
        }
    }

Настройки запуска:

"iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:50521",
      "sslPort": 44310
    }

, и это пример того, как я вызываю API в Почтальоне: http://localhost:50521/api/pets/GetPets/10/0/

Я верю, что должен получить 200 OK, но все равно я получаю ошибку 404! Как я могу это исправить ??

1 Ответ

1 голос
/ 03 октября 2019

Шаблон маршрута использовался неправильно

[HttpGet("GetPets/{pageSize}/{pageIndex}/{keyWord?}")]
public async Task<IActionResult> GetPets(int pageSize, int pageIndex, string keyWord = null)
{
    var serviceResult = await _petService.GetPets(pageSize, pageIndex, keyWord);
    return Ok(serviceResult);
}

В исходном маршруте отсутствовали параметры шаблона.

Фактически все показанные маршруты не имеют своих параметров в шаблоне маршрута.

Ссылка на шаблон маршрута

Токены в фигурных скобках ({...}) определяют параметры маршрута, которые связаны, если маршрут соответствует. Вы можете определить более одного параметра маршрута в сегменте маршрута, но они должны быть разделены литеральным значением. Например, {controller = Home} {action = Index} не является допустимым маршрутом, поскольку между {controller} и {action} нет буквального значения. Эти параметры маршрута должны иметь имя и могут иметь дополнительные атрибуты.

Литеральный текст, отличный от параметров маршрута (например, {id}) и разделителя пути /, должен соответствовать тексту в URL. При сопоставлении текста регистр не учитывается и основан на декодированном представлении пути URL. Чтобы сопоставить буквенный разделитель параметра маршрута ({или}), экранируйте его, повторяя символ ({{или}}).

Ссылка Маршрутизация в ASP.NET Core

Ссылка Маршрутизация к действиям контроллера в ASP.NET Core

...