最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。

十年河东十年河西,莫欺少年穷。 

   本人最近在研究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方法的问题相关推荐

  1. 解决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 ...

  2. AndroidStudio3.0无法打开Android Device Monitor的解决办法(An error has occurred on Android Device Monitor)...

    ---恢复内容开始--- 打开monitor时出现 An error has occurred. See the log file... ------------------------------- ...

  3. 成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred

    成功解决安装cuda的时候,下载的文件自动消失,并且出现An unknown error has occurred. 目录 解决问题 解决思路 解决方法 解决问题 安装cuda的时候,下载的文件自动消 ...

  4. 解决Eclipse,MyEclipse出现An error has occurred,See error log for more details的错误

    现把找到的解决方法整理提供给大家,如下: 方法1. 在"开始"-->"运行"---->打入"cmd"进入命令提示行后,再进入ec ...

  5. Error:A JNI error has occurred, please check your installation and try again的解决方法

    我是在使用idea时遇到的这个问题,这个问题出现的原因有两种: 第一种可能: 如果你将其他module下的package直接复制到另一个module的src下,那么package的名字可能会变为jav ...

  6. 已解决selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary

    已解决selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary ...

  7. An unexpected error has occurred. Conda has prepared the above report. 解决办法

    使用 miniconda 创建虚拟环境的时候,报错: An unexpected error has occurred. Conda has prepared the above report. 网上 ...

  8. 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 ...

  9. 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 ...

最新文章

  1. html中有csstext方法吗,style对象的cssText方法有哪些使用方法
  2. Python-pcl 随机采样一致性算法
  3. 安装mysql_python的适合遇到mysql_config not found解决方案(mac)
  4. jQuery框架学习第二天:jQuery中万能的选择器
  5. select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET(转)
  6. 10款优秀的跨平台免费生产力软件[转]
  7. Spring 自动装配 ‘byName’
  8. 为什么我推荐ImageJ?
  9. Windows基本磁盘结构简析(二)——MBR结构分析
  10. 用友NC的一些漏洞复现
  11. 大型央企云边协同建设方案及其借鉴意义分析
  12. 计算机智能化的例子,工程机械智能化技术案例实例.ppt
  13. 【CSDN问答】关于CSDN问答社区的那些事儿
  14. Python3.9,寻找质数,埃拉托色尼算法
  15. [机缘参悟-82]:企业、HR、管理者激励员工的本质
  16. 用PyOpenGL叩开3D的心扉——OpenGL全解析(1)
  17. 怎样循序渐进、有效地学习JavaScript(转)
  18. React中使用useState数据异步问题解决方法
  19. Adobe dreamweaver cs6 代码颜色配色方案
  20. 【KALI基础】字典生成和CRUNCH工具的运用

热门文章

  1. 2020技术趋势报告-中文版
  2. 最新《科学》重磅!科学家喊你赶快关心自己的孩子:缺乏母爱会导致大脑基因改变...
  3. 关于机器学习实战,那些教科书里学不到的12个“民间智慧”
  4. 学界 |《nature》杂志:我们有义务搞懂我们所创造出来的技术
  5. 干货分享:自动驾驶核心技术进展之车用毫米波雷达
  6. 谷歌人工智能野心:从“下围棋”开始走向商用赚钱
  7. CSDN 插件限时内测,新用户抢永久免费去广告特权!
  8. 神秘使者到 Java 帝国传道协程,竟被轰了出去!
  9. 帅爆了!3个月0基础转型头条数据分析师,他做对了什么?
  10. 【转载】Java异常控制机制和异常处理原则