解决webApiMessageAn error has occurred./Message不能写多个Get方法的问题
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。
十年河东十年河西,莫欺少年穷。
本人最近在研究C#webAPI相关知识,发现webAPI不能够支持多个Get方法,这些Get方法有如下一特点:
相同数量的参数,这些参数类型可以不相同。奇怪的是:即使这些方法的返回值不同,方法名不同,但在程序请求执行过程中会出现如下错误提示:
<Error> <Message>An error has occurred.</Message> <ExceptionMessage> Multiple actions were found that match the request: System.Net.Http.HttpResponseMessage GetById(Int32) on type WebApiTest.Controllers.PersonController System.String GetBySex(System.String) on type WebApiTest.Controllers.PersonController </ExceptionMessage> <ExceptionType>System.InvalidOperationException</ExceptionType> <StackTrace> at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext) at System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext) at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage request, CancellationToken cancellationToken) at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) </StackTrace> </Error>
譬如:如下两个方法:
[HttpGet]public HttpResponseMessage GetById(int Id){list = list.Where(p => p.Id == Id).ToList();return ResultToJson.toJson(list);}[HttpGet]public HttpResponseMessage GetByName([FromUri]string Name){list = list.Where(p => p.Name == Name).ToList();return ResultToJson.toJson(list);}
在请求过程中就会报上述错误,究其原因,是因为我们在Get请求时,两个方法都需要接收一个参数,导致了:不知道应该执行哪个方法的问题。
你可能会问:我写的方法名不一样,并且在Get请求时,明确了请求的是哪个方法,为什么还会报错?
究其原因,是因为WebApiConfig的配置引起的,在你新建的项目中,webApiConfig的配置是不指向Action的,初始的webApiConfig如下:
public static void Register(HttpConfiguration config){config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });}
routeTemplate: "api/{controller}/{id}",从这句可以看出,和Action没有任何毛关系,所以,GEt请求时:即使你指定了方法名,也会报错。
因此:我们有必要修改下这个配置,修改成指向特定的Action,也就解决了上述问题。修改后的代码如下:
public static void Register(HttpConfiguration config){config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{action}/{id}",defaults: new { controller = "Home", action = "Index", id = RouteParameter.Optional });}
所以嘛,我认为VS项目初始化脑残,故意给我们程序员找麻烦,明知道潜在的问题,TMD就是不修复,还得我们自己百度找答案!
@陈卧龙的博客
解决webApiMessageAn error has occurred./Message不能写多个Get方法的问题相关推荐
- 解决Bazel:Error: LinkageError occurred while loading main class com.google.devtools.build.lib.bazel.
解决Bazel安装错误:Error: LinkageError occurred while loading main class com.google.devtools.build.lib.baze ...
- AndroidStudio3.0无法打开Android Device Monitor的解决办法(An error has occurred on Android Device Monitor)...
---恢复内容开始--- 打开monitor时出现 An error has occurred. See the log file... ------------------------------- ...
- 成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred
成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 目录 解决问题 解决思路 解决方法 解决问题 安装cuda的时候,下载的文件自动消 ...
- 解决Eclipse,MyEclipse出现An error has occurred,See error log for more details的错误
现把找到的解决方法整理提供给大家,如下: 方法1. 在"开始"-->"运行"---->打入"cmd"进入命令提示行后,再进入ec ...
- Error:A JNI error has occurred, please check your installation and try again的解决方法
我是在使用idea时遇到的这个问题,这个问题出现的原因有两种: 第一种可能: 如果你将其他module下的package直接复制到另一个module的src下,那么package的名字可能会变为jav ...
- 已解决selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary
已解决selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary ...
- An unexpected error has occurred. Conda has prepared the above report. 解决办法
使用 miniconda 创建虚拟环境的时候,报错: An unexpected error has occurred. Conda has prepared the above report. 网上 ...
- youtube_dl urlopen error EOF occurred in violation of protocol (_ssl.c:nnn) 错误的解决方法
youtube_dl urlopen error EOF occurred in violation of protocol (_ssl.c:nnn) 错误的解决方法 参考文章: (1)youtube ...
- mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command【异常已解决】
mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command: The java ...
最新文章
- html中有csstext方法吗,style对象的cssText方法有哪些使用方法
- Python-pcl 随机采样一致性算法
- 安装mysql_python的适合遇到mysql_config not found解决方案(mac)
- jQuery框架学习第二天:jQuery中万能的选择器
- select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
- 10款优秀的跨平台免费生产力软件[转]
- Spring 自动装配 ‘byName’
- 为什么我推荐ImageJ?
- Windows基本磁盘结构简析(二)——MBR结构分析
- 用友NC的一些漏洞复现
- 大型央企云边协同建设方案及其借鉴意义分析
- 计算机智能化的例子,工程机械智能化技术案例实例.ppt
- 【CSDN问答】关于CSDN问答社区的那些事儿
- Python3.9,寻找质数,埃拉托色尼算法
- [机缘参悟-82]:企业、HR、管理者激励员工的本质
- 用PyOpenGL叩开3D的心扉——OpenGL全解析(1)
- 怎样循序渐进、有效地学习JavaScript(转)
- React中使用useState数据异步问题解决方法
- Adobe dreamweaver cs6 代码颜色配色方案
- 【KALI基础】字典生成和CRUNCH工具的运用
热门文章
- 2020技术趋势报告-中文版
- 最新《科学》重磅!科学家喊你赶快关心自己的孩子:缺乏母爱会导致大脑基因改变...
- 关于机器学习实战,那些教科书里学不到的12个“民间智慧”
- 学界 |《nature》杂志:我们有义务搞懂我们所创造出来的技术
- 干货分享:自动驾驶核心技术进展之车用毫米波雷达
- 谷歌人工智能野心:从“下围棋”开始走向商用赚钱
- CSDN 插件限时内测,新用户抢永久免费去广告特权!
- 神秘使者到 Java 帝国传道协程,竟被轰了出去!
- 帅爆了!3个月0基础转型头条数据分析师,他做对了什么?
- 【转载】Java异常控制机制和异常处理原则