这两天在实现一个WebAPI的服务过程中遇到了下面的一些问题

1, 一个Controller中添加多个Action

基于模板创建WebAPI项目后,项目中会自动生成一个ValueController的示例性代码,

其中包含几个以Http标准动作名城Get,Post,Put,Delete等定义的Action模板,并结合路由定义routeTemplate: "api/{controller}/{id}"来提供服务。

当向Controller添加了新HttpPost特性的Action时,在进行Post的请求时,会出现500的错误,详细信息如下:

{"Message":"出现错误。","ExceptionMessage":"找到了与该请求匹配的多个操作: \r\n类型 WebAPI.Controllers.ValuesController 的 ParseValue\r\n类型 WebAPI.Controllers.ValuesController 的 ParseValues","ExceptionType":"System.InvalidOperationException","StackTrace":"   在 System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n   在 System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n   在 System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n   在 System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"}

对Asp.net平台MVC框架项目了解的朋友,一下子就能够定位到是路由定义的问题,通过修改路由为routeTemplate: "api/{controller}/{action}/{id}".在进行请求测试,一切就正常了。

2, 静态JSON消息接收

当一个大粒度的Web服务方法需要接受一些非明确后台定义格式的数据时,在WebAPI 的Controller的action中,用关键字dynamic可以满足要求。

      [HttpPost]

        public void ParseValue(dynamic value)

        {

            var person = JsonConvert.DeserializeObject<Person>(value.ToString());

        }

        [HttpPost]

        public void ParseValues(dynamic value)

        {

            var persons = JsonConvert.DeserializeObject<List<Person>>(value.ToString());

}

  

调试效果如下:

前端请求信息

后端获取信息

WebAPI应用问题整理的更多相关文章

  1. Asp.Net WebApi Post请求整理(一)

    Asp.Net WebApi+JQuery Ajax的Post请求整理 一.总结 1.WebApi 默认支持Post提交处理,返回的结果为json对象,前台不需要手动反序列化处理.2.WebApi 接 ...

  2. Asp.Net WebApi Get请求整理(一)

    Asp.Net WebApi+JQuery Ajax的Get请求整理 一.总结 1.Asp.Net WebApi默认不支持Get请求,需要在Action方法上指定[HttpGet], 除非Action ...

  3. Asp.Net WebApi 项目及依赖整理

    一.目前版本 Microsoft ASP.NET Web API 2.2 对应程序集版本5.2.3 二.默认生成的配置文件中的内容 <packages> <package id=&q ...

  4. WebApi与MVC Route 问题整理

    1. 为WebAPI添加 Area后,完成了CustomControllerSelector的制定. 跟踪WebAPI底层,整理WebAPI源码后发现几个问题: 1. 使用Area的controlle ...

  5. Asp.Net WebApi开启Session回话

    一.在WebApi项目中默认没有开启Session回话支持.需要在Global中的Init()方法中指定会员需要支持的类型 public class WebApiApplication : Syste ...

  6. Asp.Net Core WebAPI入门整理(三)跨域处理

    一.Core  WebAPI中的跨域处理  1.在使用WebAPI项目的时候基本上都会用到跨域处理 2.Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 3.使用方法简单 ...

  7. Asp.Net Core WebAPI入门整理(二)简单示例

    一.Core WebAPI中的序列化 使用的是Newtonsoft.Json,自定义全局配置处理: // This method gets called by the runtime. Use thi ...

  8. Asp.Net Core WebAPI入门整理(一)

    一.Asp.Net Core  WebAPI 1.目前版本是v1.1 2.默认路由处理和Asp.Net WebAPI有些 区别了,现在使用的是控制器路由[Route("api/Menu&qu ...

  9. Asp.Net Core WebAPI入门整理(四)参数获取

    一.总结整理,本实例对应.Net Core 2.0版本 1.在.Net Core WebAPI 中对于参数的获取及自动赋值,沿用了Asp.Net  MVC的有点,既可以单个指定多个参数,右可以指定Mo ...

随机推荐

  1. Mac无法将自定义图标添加到Launchpad的替代方案(桌面双击Shell运行)

    截止在几天之前的Mac OS版本都无法实现将自定义图标添加到Launchpad.我使用的是10.12. 替代的思路就是在桌面新建一个Shell文件,然后使软件在后台运行,最后就是双击Shell文件能自 ...

  2. Mac服务管理-Launchd(转)

    背景: 在Mac下没有像Linux那样有很多的关于init方面的工具,从init的发展历史https://en.wikipedia.org/wiki/Init上可以知道,Mac使用的是Launchd作 ...

  3. java中的POJO、PO、VO分别是什么?

    1.PO:persistant object 持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 2. VO:value object值对象. 通常 ...

  4. 033-JsonUtils 工具类模板

    模板一:使用的是jackson package cn.e3mall.common.utils; import java.util.List; import com.fasterxml.jackson. ...

  5. tomcat+nginx+redis集群搭建并解决session共享问题。

    1 集群搭建 https://www.cnblogs.com/yjq520/p/7685941.html 2 session共享 https://blog.csdn.net/tuesdayma/art ...

  6. Nginx教程(6) 动静分离架构

    一.原理 Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离.严格意义上说应该是动态请求跟静态请求分开,可以理解成使用Nginx 处理静态页面,To ...

  7. CentOS 7_64位系统下搭建Hadoop_2.8.0分布式环境

    准备条件: CentOS 7 64位操作系统 | 选择minimal版本即可(不带可视化桌面环境),也可以选择带完整版Hadoop-2.8.0 | 本文采用的是Hadoop-2.8.0版本.JDK1. ...

  8. lazy初始化和线程安全的单例模式

    1.双检锁/双重校验锁(DCL,即 double-checked locking) JDK 版本:JDK1.5 起 是否 Lazy 初始化:是 是否多线程安全:是 实现难度:较复杂 描述:这种方式采用 ...

  9. ORACLE: private ,dao中util执行规范,nextval计数把通过nextval插入但已删除的列也统计在内向后计数

    private DAO中的util.rs.sql都应该为private. 其中每个具体方法执行增删改查操作前打开数据库连接,操作完成后关闭数据库连接.操作要规范,不然易出错. nextval seq_ ...

  10. SqlHelper---操作数据库

    public class SqlHelper { /// <summary> /// 数据库连接字符串 /// </summary> public static readonl ...