在没有添加路由时,webapi 的访问比较恶心,访问的时候是没有接口方法的。如果定义了同样参数的方法,它就傻傻的分不清的,为了解决这个问题,我们加上路由吧。
这是生成的api帮助文档列表,可以看到下面两个是直到values这一级的,参数一样,只是请求方式不一样。
接口代码
/// <summary> /// 获取值测试类 /// </summary> [RoutePrefix("api/Values")] public class ValuesController : ApiController { /// <summary> /// 获取枚举类型 /// </summary> /// <returns>枚举类型</returns> [Route("GETIEnumerable"), HttpGet] public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } /// <summary> /// 获取值 /// </summary> /// <param name="id"></param> /// <returns></returns> // GET api/values/5 [Route("GETINT"), HttpGet] public string Get(int id) { return "value" + id; } /// <summary> /// 从请求体获取内容 /// </summary> /// <param name="product">po</param> [Route("PostV"), HttpPost] public string Post([FromBody]Product product) { return product.Name + product.id; } // PUT api/values/5 public void Put(int id, [FromBody]string value) { } // DELETE api/values/5 public void Delete(int id) { } } /// <summary> /// 商品 /// </summary> public class Product { /// <summary> /// 名称 /// </summary> public string Name { get; set; } /// <summary> /// ID /// </summary> public string id { get; set; } }
[RoutePrefix("api/Values")]配置路由前缀,它下面的方法都要加上这个api/Values才能访问。
“api/”这个是保证它是接口地址。
因为即使在WebApiConfig中注册了默认接口路由
public static void Register(HttpConfiguration config) { // Web API 配置和服务 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
我们用[Route]这个特性的时候也是优先注册的。
然后通过以前搞的配置测试方法可以看到效果。
话说这玩意真心方便,跟前端对接直接给个帮助文档地址就好了。呵呵!