我該如何在一個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前面的名稱