我想使用基於URL的版本爲我的控制器網絡API 2。我發現的最佳解決方案是以下代碼。 我正在尋找更好的解決方案。我試圖限制它沒有工作 也許我做了一些事情不對我唯一關心的是在不同的命名空間使用控制器相同的名稱...?! 我userd字符串合併創建想要的類型。可能這不是一個好主意。 請對這個主題的很好的參考,如果你知道的任何.....?控制器版本使用URL
public class ControllerVersioning : DefaultHttpControllerSelector
{
private HttpConfiguration _config;
public ControllerVersioning(HttpConfiguration config)
: base(config)
{
_config = config;
}
public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
{
var routeData = request.GetRouteData();
var controllerName = routeData.Values["controller"].ToString();
controllerName = char.ToUpper(controllerName[0]) + controllerName.Substring(1);
var versionName = routeData.Values["version"].ToString();
HttpControllerDescriptor controllerDescriptor = new HttpControllerDescriptor();
controllerDescriptor.Configuration = _config;
controllerDescriptor.ControllerName = controllerName;
string s = "ngolforoushan.Web.Api.Controllers.V" + versionName + "." + controllerName + "Controller";
Type t=Type.GetType(s);
controllerDescriptor.ControllerType = t;
return controllerDescriptor;
}
}
看看這裏實現的VersionedRoute屬性:http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/RoutingConstraintsSample/RoutingConstraints.Server/Controllers/CustomerVersion1Controller.cs – 2015-04-05 21:09:18
感謝您的回覆,但是, codeplex代碼與控制器有着不同的名稱,這很容易;-) – 2015-04-06 05:13:30