.Net MVC 使用Areas后存在相同Controller时报错的解决办法; 从上下文获取请求的Area名及Controller名

先来说个额外的问题:如何在请求上下文(比如过滤器的中)获取请求对应的Area和Controller 名字?(假设请求上下文对象为 filterContext ):

1. 获取Area名 :

**(string)filterContext.RouteData.DataTokens["area"]**即可,

如果该请求不是对应Areas中的响应则DataTokens中不包含Key为"area"的键和值,则此处得到null。

2. 获取Controller名:

(string)filterContext.RouteData.Values["Controller"]

此处不通过DataTokens来获取,是因为当请求不是走Areas中的路由时,DataTokens中是不包含Key为"Controller"的键和值的。

.Net MVC项目添加区域后,如果使用的Controller与区域外的Controller重名时,默认路由未修改的情况下会出现该错误:

Multiple types were found that match the controller named 'XXX'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.

其实错误提示这里已经提示出了原因与解决方法:

问题原因:使用Areas后存在多个相同的Controller,路由注册未分开

解决方法:

分别修改 "RouteConfig.cs" 文件的 "RegisterRoutes" 方法 及 "XXXAreaRegistration.cs" 文件的 "RegisterArea" 方法, 添加namespaces指明各自的Controller对应的命名空间即可(其实就跟不同命名空间下存在相同类名是一样的道理):

相关推荐
Cloud-Future2 天前
Spring MVC 处理请求的流程
java·spring·mvc
optimistic_chen4 天前
【Java EE进阶 --- SpringBoot】Spring IoC
spring boot·后端·spring·java-ee·mvc·loc
wuk9984 天前
在Spring MVC中使用查询字符串与参数
java·spring·mvc
原来是好奇心5 天前
深入剖析Spring Boot中Spring MVC的请求处理流程
spring boot·spring·mvc
xkroy5 天前
创建Spring MVC和注解
学习·spring·mvc
期待のcode5 天前
SpringMVC的请求接收与结果响应
java·后端·spring·mvc
Pure03195 天前
Spring MVC BOOT 中体现的设计模式
spring·设计模式·mvc
The Sheep 20236 天前
.NetCore MVC
mvc·.netcore
YDS8296 天前
SpringMVC —— Spring集成web环境和SpringMVC快速入门
java·spring·mvc·springmvc
xkroy6 天前
Sping Web MVC入门
mvc