1
我有很多應用的控制器:地圖索引多途徑
ApiV1Controller
ApiV2Controller
ApiV3Controller
...
是否有可能映射單MapRoute
語句像/api/v1/{action}
網址爲他們的路線?
我有很多應用的控制器:地圖索引多途徑
ApiV1Controller
ApiV2Controller
ApiV3Controller
...
是否有可能映射單MapRoute
語句像/api/v1/{action}
網址爲他們的路線?
您可以編寫自定義路線。讓我們假設你有如下控制器:
public class ApiV1Controller : Controller
{
public ActionResult Index()
{
return Content("v1");
}
}
public class ApiV2Controller : Controller
{
public ActionResult Index()
{
return Content("v2");
}
}
public class ApiV3Controller : Controller
{
public ActionResult Index()
{
return Content("v3");
}
}
現在編寫自定義路線:
public class ApiRoute : Route
{
public ApiRoute()
: base("api/{version}/{action}", new RouteValueDictionary(new { action = "index" }), new MvcRouteHandler())
{
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var rd = base.GetRouteData(httpContext);
if (rd == null)
{
return null;
}
rd.Values["controller"] = "Api" + rd.GetRequiredString("version");
return rd;
}
}
這可能在你的Global.asax
登記:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add("ApiRoute", new ApiRoute());
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
,這就是這麼多了。現在,你可以使用URL玩:
/api/v1
/api/v2
/api/v3