Web Api 几点注意事项(Post 传递多个参数、ApiController多个Action函数)

近期有项目需要使用对外提供接口服务,原来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

(16)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
IT柚子的头像IT柚子
上一篇 2019年3月30日 下午7:29
下一篇 2019年3月30日 下午7:34

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注