在没有添加路由时,webapi 的访问比较恶心,访问的时候是没有接口方法的。如果定义了同样参数的方法,它就傻傻的分不清的,为了解决这个问题,我们加上路由吧。
这是生成的api帮助文档列表,可以看到下面两个是直到values这一级的,参数一样,只是请求方式不一样。
接口代码
////// 获取值测试类 /// [RoutePrefix("api/Values")] public class ValuesController : ApiController { ////// 获取枚举类型 /// ///枚举类型 [Route("GETIEnumerable"), HttpGet] public IEnumerableGet() { return new string[] { "value1", "value2" }; } /// /// 获取值 /// /// ///// GET api/values/5 [Route("GETINT"), HttpGet] public string Get(int id) { return "value" + id; } /// /// 从请求体获取内容 /// /// po [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) { } } ////// 商品 /// public class Product { ////// 名称 /// public string Name { get; set; } ////// ID /// 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]这个特性的时候也是优先注册的。
然后通过以前搞的配置测试方法可以看到效果。
话说这玩意真心方便,跟前端对接直接给个帮助文档地址就好了。呵呵!