03-两个核心文件WebApiConfig 和ValuesController

我们创建好了项目后,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 的自托管能力。

发表回复

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