.NET Core методы ApiController не вызваны - PullRequest
1 голос
/ 04 октября 2019

Я использовал скаффолдинг для создания контроллера API. Это тестовый метод, который я добавил туда:

namespace MyApp.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AuthenticationController : ControllerBase
    {
        [HttpPost]
        public JsonResult VerifyIsLoggedIn()
        {
            Dictionary<string, bool> result = new Dictionary<string, bool> { { "Authenticated", true} };
            return new JsonResult(result);
        }
    }
}

Мой Program.cs выглядит так:

namespace MyApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

Я запускаю приложение, получаю экран входа в систему, могу войти в системууспешно, но затем, когда я перехожу по указанному ниже URL-адресу, я получаю сообщение об ошибке «Веб-страница не найдена для веб-адреса:»

https://localhost:12345/api/Authentication/VerifyIsLoggedIn

Похоже, я должен сделатьнекоторые изменения в Program.cs, но все, что я пробовал, не увенчалось успехом. Как мне решить эту проблему?

1 Ответ

2 голосов
/ 04 октября 2019

Показанный URL

https://localhost:12345/api/Authentication/VerifyIsLoggedIn

не соответствует шаблону маршрута атрибута для указанного действия контроллера (см. Комментарии в коде)

[Route("api/[controller]")]
[ApiController]
public class AuthenticationController : ControllerBase {    
    //POST api/Authentication
    [HttpPost]
    public IActionResult VerifyIsLoggedIn() {
        var result = new { Authenticated = true };
        return Ok(result);
    }
}

Также, если вы пытаетесь просмотреть URL вв браузере по умолчанию используется HTTP GET, в то время как контроллер может обслуживать только запросы HTTP POST.

Вам необходимо обновить используемый HTTP-глагол и шаблон маршрута

[Route("api/[controller]")]
[ApiController]
public class AuthenticationController : ControllerBase {    
    //GET api/Authentication/VerifyIsLoggedIn
    [HttpGet("[action]")]
    public IActionResult VerifyIsLoggedIn() {
        var result = new { Authenticated = true };
        return Ok(result);
    }
}

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

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

...