webapi项目学习

259 阅读1分钟

今天是国庆日,没有回家,也没有出去玩,在家学习。祝大家国庆愉快,也祝祖国越来越强大。

好了,开始今天的学习。

新建一个webapi项目

image.png

然后运行结果大致如下

image.png

现在我新建了一个控api测试控制器TestController 写上代码

image.png

然后运行,发现怎么也找不到action,于是报错

image.png

怎么回事呀?这个配置是匹配到了控制器,怎么不显示呀!

     app.UseEndpoints(endpoints =>
            {
                //需要提前注入控制器服务,才能使用特性路由。
                endpoints.MapControllers();
            });

我也很疑惑,之前没有去解决。今天一定要把它解决掉。网上查资料。最后找到一篇,说要在控制器上加上[action] 占位符参数。于是试了一下。代码改写成这样的。

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        [HttpGet]
        public string demo()
        
        {
            return ("这是测试数据");
        }

然后运行

image.png

结果出来了。

还有一种是在action上直接加对应的action,这样改写。

    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        [HttpGet]
        [Route("goDemo")]
        public string demo()
        
        {
            return ("这是测试数据");
        }

运行结果是

image.png 同样出来了。 还有一种写法是在[HttpGet]特性上做文章。改写这样这样

    [Route("api/[controller]")]
    [ApiController]
    public class TestController : ControllerBase
    {
        [HttpGet("HelloDemo")]
       // [Route("goDemo")]
        public string demo()
        
        {
            return ("这是测试数据");
        }

运行结果是

image.png

也出来了。

运行启动项选择 这里配置了两个

image.png

如果使用WebApiDemo这个就会多一个窗体出来。如果使用IISExpress则不会。

image.png

补充:这个其实是路由配置问题,还是要多多学习原理,不能只看表面。

可以参考这一篇:juejin.cn/post/723437… 理解更好,更快。