首页 > 解决方案 > .NET Core ApiController 方法未调用

问题描述

我使用脚手架来创建 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 进行一些更改,但是我尝试过的一切都没有成功。我该如何解决这个问题?

标签: c#asp.net-coreasp.net-core-routing

解决方案


显示的网址

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 中的参考路由


推荐阅读