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