近期有项目需要使用对外提供接口服务,原来Web Api 没有尝试过,所以这里使用Web Api来开发接口。下面总结几点开发中所遇到的问题,以作记录方便后人。。
1、Post 传参的问题
一般使用Web serivce 、MVC等等方式做接口的时候,其传递参数就是拼接字符串。但是Web Api对于Post的参数传递却不一样,每次只能接受一个参数。
其实通过官方的Demo我们也可以看出参数的传递方式。
// POST api/values
public void Post([FromBody]string value)
{
}
单个参数的传递就可以参考官方的方法,但是如果有多个参数就不能在后面定义多个基本数据类型了。
多个参数的时候就需要做封装处理,比如封装成实体类或其他。在请求的时候参数可以使用json的形式传递给接口,这个json也不是随意定义的,其字段数据类型等等要和接受的实体类一致。
例如下面:
//请求接口所传递的json数据
{"UserId":"48f3889","UserName":"超级管理员","Content":"撒大帝","Remark":"","IsOk":true}
//接口的定义方式
[HttpPost]
public string CreateActionLog([FromBody]PostData data)
{
return "";
}
其中 PostData是一个自定义的实体类。
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导致错误的。
自带默认路由
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
从上面的默认路由很明显发现是没有带Action的
处理方法:
修改默认的路由
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = RouteParameter.Optional }
); 发布者:IT柚子,转转请注明出处:https://ityouzi.com/archives/2330.html
微信扫一扫
支付宝扫一扫