博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何解决Asp.Net MVC和WebAPI的Controller名称不能相同的问题
阅读量:7232 次
发布时间:2019-06-29

本文共 921 字,大约阅读时间需要 3 分钟。

原文:

1、问题描述

假如有一个文章的业务(Article),我们在 Controllers文件夹中创建MVC Controller和Api Controller,各个Controller中都有相同的获取文章内容的Action(Content)。路由为默认设置
MVC的路由为
{controller}/{action}/{id}
Api的路由为
api/{controller}/{action}/{id}
然而我希望访问的
  • MVC的URL为 ~/Article/Content/1
  • API的URL为 ~/api/Article/Content/1

那么就是MVC和API的控制器都应该命名为ArticleController,其中MVC控制器继承与Controller,API控制器继承ApiController。但是两个控制器肯定不能重名啊。

那我们先把API的名字改为ArticleApiController,So 访问路径为api/ArticleApi/Content/1 可是这样不是个事儿啊~~

So......We need change the controller name!

2、问题原因

通过查看微软System.Web.Http的源码,我们发现其实这个问题也很好解决,在这个DefaultHttpControllerSelector类中,微软有定义Controller的后缀,如图

我们只要把ApiController的后缀改成和MVC不一样,就可以解决问题了。
这个字段是个静态只读的Field,我们只要把它改成ApiContrller就解决问题了

img_dd791808a28f6a7f64d47a1d5225fcc9.jpe

3、问题解决

可以利用反射解决这个问题,在注册API路由前添加以下代码即可解决

var suffix = typeof(DefaultHttpControllerSelector).GetField("ControllerSuffix", BindingFlags.Static | BindingFlags.Public);if (suffix != null) suffix.SetValue(null, "ApiController");

img_006a0a9c0672a164ea94cf9a86c11b90.png

好了问题解决~~~

转载地址:http://gfvfm.baihongyu.com/

你可能感兴趣的文章
在使用springMVC时,我使用了@Service这样的注解,发现使用注解@Transactional声明的事务不起作用...
查看>>
Servlet入门(第一个Servlet的Web程序)
查看>>
Android学习笔记进阶18 之画图并保存图片到本地
查看>>
安装wxWidgets遭遇的两大关卡
查看>>
MapReduce实战(六)共同粉丝
查看>>
Java 实现单链表反序
查看>>
移植alsa-lib遇到的问题
查看>>
镜像的缓存特性 - 每天5分钟玩转 Docker 容器技术(14)
查看>>
[Node.js]多进程
查看>>
面试归来,感觉无望,下次再战
查看>>
C#之值类型和引用类型
查看>>
项目经理的五种权利
查看>>
病态矩阵与条件数
查看>>
Java IntelliJ IDEA 不能显示项目里的文件结构
查看>>
HDU 5325 Crazy Bobo(思路+dfs 记忆化)
查看>>
.NET平台常用的框架整理
查看>>
使用EmbeddedValueResolverAware读取配置文件内容
查看>>
打印从1到最大的n位数
查看>>
drawnet.py绘制网络结构
查看>>
Javascript中apply、call、bind
查看>>