如何解决Asp.Net MVC和WebAPI的Controller名称不能相同的问题
2021-07-03 13:06
标签:eof mvc 解决问题 png jpg cto bapi https href 那么就是MVC和API的控制器都应该命名为 So......We need change the controller name! 通过查看微软 可以利用反射解决这个问题,在注册API路由前添加以下代码即可解决 好了问题解决~~~ 如何解决Asp.Net MVC和WebAPI的Controller名称不能相同的问题 标签:eof mvc 解决问题 png jpg cto bapi https href 原文地址:https://www.cnblogs.com/lonelyxmas/p/9894314.html1、问题描述
假如有一个文章的业务(Article),我们在 Controllers文件夹中创建MVC Controller和Api Controller,各个Controller中都有相同的获取文章内容的Action(Content)。路由为默认设置
MVC的路由为
{controller}/{action}/{id}
Api的路由为
api/{controller}/{action}/{id}
然而我希望访问的
~/Article/Content/1
~/api/Article/Content/1
ArticleController
,其中MVC控制器继承与Controller
,API控制器继承ApiController
。但是两个控制器肯定不能重名啊。
那我们先把API的名字改为ArticleApiController
,So 访问路径为api/ArticleApi/Content/1
可是这样不是个事儿啊~~2、问题原因
System.Web.Http
的源码,我们发现其实这个问题也很好解决,在这个DefaultHttpControllerSelector
类中,微软有定义Controller
的后缀,如图
我们只要把ApiController
的后缀改成和MVC不一样,就可以解决问题了。
这个字段是个静态只读的Field,我们只要把它改成ApiContrller
就解决问题了3、问题解决
var suffix = typeof(DefaultHttpControllerSelector).GetField("ControllerSuffix", BindingFlags.Static | BindingFlags.Public);
if (suffix != null) suffix.SetValue(null, "ApiController");
代码示例下载
文章标题:如何解决Asp.Net MVC和WebAPI的Controller名称不能相同的问题
文章链接:http://soscw.com/essay/101281.html