今天是国庆日,没有回家,也没有出去玩,在家学习。祝大家国庆愉快,也祝祖国越来越强大。
好了,开始今天的学习。
新建一个webapi项目
然后运行结果大致如下
现在我新建了一个控api测试控制器TestController 写上代码
然后运行,发现怎么也找不到action,于是报错
怎么回事呀?这个配置是匹配到了控制器,怎么不显示呀!
app.UseEndpoints(endpoints =>
{
//需要提前注入控制器服务,才能使用特性路由。
endpoints.MapControllers();
});
我也很疑惑,之前没有去解决。今天一定要把它解决掉。网上查资料。最后找到一篇,说要在控制器上加上[action] 占位符参数。于是试了一下。代码改写成这样的。
[Route("api/[controller]/[action]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
public string demo()
{
return ("这是测试数据");
}
然后运行
结果出来了。
还有一种是在action上直接加对应的action,这样改写。
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet]
[Route("goDemo")]
public string demo()
{
return ("这是测试数据");
}
运行结果是
同样出来了。
还有一种写法是在[HttpGet]特性上做文章。改写这样这样
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet("HelloDemo")]
// [Route("goDemo")]
public string demo()
{
return ("这是测试数据");
}
运行结果是
也出来了。
运行启动项选择 这里配置了两个
如果使用WebApiDemo这个就会多一个窗体出来。如果使用IISExpress则不会。
补充:这个其实是路由配置问题,还是要多多学习原理,不能只看表面。
可以参考这一篇:juejin.cn/post/723437… 理解更好,更快。