近期有项目需要使用对外提供接口服务,原来Web Api 没有尝试过,所以这里使用Web Api来开发接口。下面总结几点开发中所遇到的问题,以作记录方便后人。。
1、Post 传参的问题
一般使用Web serivce 、MVC等等方式做接口的时候,其传递参数就是拼接字符串。但是Web Api对于Post的参数传递却不一样,每次只能接受一个参数。
其实通过官方的Demo我们也可以看出参数的传递方式。
1 2 3 4 |
// POST api/values public void Post([FromBody]string value) { } |
单个参数的传递就可以参考官方的方法,但是如果有多个参数就不能在后面定义多个基本数据类型了。
多个参数的时候就需要做封装处理,比如封装成实体类或其他。在请求的时候参数可以使用json的形式传递给接口,这个json也不是随意定义的,其字段数据类型等等要和接受的实体类一致。
例如下面:
//请求接口所传递的json数据
1 |
{"UserId":"48f3889","UserName":"超级管理员","Content":"撒大帝","Remark":"","IsOk":true} |
//接口的定义方式
1 2 3 4 5 |
[HttpPost] public string CreateActionLog([FromBody]PostData data) { return ""; } |
其中 PostData是一个自定义的实体类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class PostData { /// <summary> /// 用户id /// </summary> public string UserId { get; set; } /// <summary> /// 用户姓名 /// </summary> public string UserName { get; set; } /// <summary> /// 操作内容 /// </summary> public string Content { get; set; } /// <summary> /// 操作备注信息 /// </summary> public string Remark { get; set; } /// <summary> /// bool 类型 /// </summary> public bool IsOk { get; set; } } |
接口方面就可以使用PostData对象的数据了。
2、同一个ApiController 出现多个get或者post等调用提示错误
这问题是因为默认的Web Api 中的路由是没有带Action的,所以调用的时候不知道是调用那个Action导致错误的。
自带默认路由
1 2 3 4 5 |
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); |
从上面的默认路由很明显发现是没有带Action的
处理方法:
修改默认的路由
1 2 3 4 5 |
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = RouteParameter.Optional } ); |
发布者:柚子,转转请注明出处:https://ityouzi.com/archives/2330.html