c# - .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 进行一些更改,但是我尝试过的一切都没有成功。我该如何解决这个问题?
解决方案
显示的网址
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 中的参考路由
推荐阅读
- ios - 数据迁移失败如何补救?
- r - R中的过滤表
- docker - Docker compose 启动后运行 shell 命令
- sql - DolphinDB 语言不支持语法吗?
- javascript - JQuery 自动将 div 滚动到底部
- php - 有没有办法从 check.php 获取 POST 数据到 index.php 和Thanks.php?
- sql - 在 SQL 中使用 WHERE 条件,其中参数可以为 NULL
- c - c程序计算圆的面积
- wordpress - XPath:仅当同一节点中的值低于另一个值时选择元素
- json - 无法使用 luis 响应中的 json 路径提取意图和得分