我们创建好了项目后,WebApiConfig 和 ValuesController 这两个是核心文件。
默认去根据 http 的方法找控制器的方法,比如 get 的方式,那么他就会去找 GETxxxxx(); 这一类方法。
错误示例
{
"Message": "出现错误。",
"ExceptionMessage": "找到了与该请求匹配的多个操作: \r\n类型 ApiDemo.Controllers.ValuesController 的 Get\r\n类型 ApiDemo.Controllers.ValuesController 的 GetABC"
}Code language: JSON / JSON with Comments (json)
WebApiConfig
位于 App_Start,它只有一个方法 Register,它被 Global.asax 调用:
GlobalConfiguration.Configure(WebApiConfig.Register);Code language: CSS (css)
这个类顾名思义,就是为了配置 WEB API 的各个方面。默认情况下,模板只生成了一个配置:路由配置。
这个路由把收到的 HTTP 请求映射到控制器类,并解析 URL 中可能带有的数据元素,确保处理管道的其他类能够使用这些数据。
public static class 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 }
);
}
}Code language: PHP (php)
RouteConfig 类中的路由注册
这个路由是注册 MVC 的,我们刚才那个路由是注册 WEB API 的。
MVC 和 API 的区别及其原因在于他们使用的路由类不同,他们的路由集合类型也不相同,一个是 HttpConfiguration,一个是 RouteCollection。
这样做的目的是尽量把 API 独立出来,不要和 MVC 有瓜葛,这样可以脱离 System.Web 程序集与 Route 和 RouteCollection 类遗留的东西,从而提供灵活的托管选项。最直接的的好处就是:WEB API 的自托管能力。
Previous: 02-使用VS2015创建第一个WEB API程序