今天在学.net core的时候发现了一个问题,终结点死活映射不了自己添加的控制器,后经过研究发现解决方法,可能这个问题不应该叫做问题,可是我是初学者,就把这个问题给拎出来。本人开发环境 VS2019+.Net Core 3.1,问题重现过程:
1.新建Web Core项目,选择空项目
2.新建文件夹“Controller”,右键该文件夹->添加->控制器->API控制器-空->设置名称为“HomeController.cs”
3.修改路由特性为 [Route("[controller]")]
4.在该路由器类下添加Index函数,返回Test字符串
5.修改Startup类中Configure函数:
原代码:
app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Hello World!"); }); });
修改后的代码:
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute("Default", "{controller=Home}/{action=Index}/{id?}"); });
运行程序显示404
然后将HomeController中的两个特性删除就可以正常运行
原因是API控制器和MVC控制器是不一样的
MVC控制器通过URL选择action方法
API控制器根据HTTP请求方法的不同来选择API控制器方法
两种控制器使用的方法不一样,所以不能混淆使用