WebAPI 如何指定進入哪個控制器(ROUTE)

我該如何在一個webAPI中,指定要進入哪個contoller呢??


 

起因是因為主管要求需要LINE跟WeChat傳輸訊息,

一開始我們只寫了LINE,所以Route 對上 控制器 可以使用default(因為就只有一個) 。

那現在的問題是,我要LINE 又要 WeChat,難道我需要寫兩個API分別呼叫嗎??

其實是不用的,我們可以告訴Route 要到哪一個 控制器上。


來看一下 一開始 我們在尚未指定route 對上controller 是下面這個樣子

namespace lineConnect
{
    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 }
          );
          var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
          config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
        }
    }
}

接著我們想要根據不同的route指定不同的Controller

namespace lineConnect
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API 設定和服務

            // Web API 路由
            config.MapHttpAttributeRoutes();        

            // Line route
            config.Routes.MapHttpRoute(
                name: "LineChat",
                routeTemplate: "api/LineChat/{id}",
                defaults: new { controller = "LineChat", id = RouteParameter.Optional },    
                constraints: new { id = "/d+" }
            );

            // Wechat route
            config.Routes.MapHttpRoute(
                name: "WeChat",
                routeTemplate: "api/WeChat/{id}",
                defaults: new { controller = "WeChat", id = RouteParameter.Optional },
                constraints: new { id = "/d+" }
            );

            // default route
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
            config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
        }
    }
}

api/XXX/{id} ==> XXX 就是代表你的Contorller前面的名稱