Итак, я использую WCF WebAPI Preview 6 в своем приложении (Orchard CMS).Я пытаюсь зарегистрировать маршрут и постоянно получаю:
Маршрут с разрешенным виртуальным путем '~ / api / register' уже добавлен.Имя параметра: virtualPath
со следующим:
var webApiRoute = new WebApiRoute(routePrefix, serviceHostFactory, serviceType) { Constraints = new RouteValueDictionary(constraints) };
находится там, где оно ломается.Я могу сделать путь маршрута любым и продолжать получать ту же ошибку.
Мой полный метод выглядит следующим образом:
public class WebApiRoutes : IRouteProvider
{
private readonly IRegistrationWebApiConfiguration _registrationWebApiConfiguration;
public WebApiRoutes(IRegistrationWebApiConfiguration registrationWebApiConfiguration)
{
_registrationWebApiConfiguration = registrationWebApiConfiguration;
}
public IEnumerable<RouteDescriptor> GetRoutes() {
return new[] {
new RouteDescriptor { Priority = 1, Route = MapServiceRoute(typeof(RegistrationResource), "api/register1006", _registrationWebApiConfiguration.GetInstance())
}
};
}
public void GetRoutes(ICollection<RouteDescriptor> routes) {
foreach (var routeDescriptor in GetRoutes())
routes.Add(routeDescriptor);
}
private static ServiceRoute MapServiceRoute(Type serviceType, string routePrefix, HttpConfiguration configuration = null, object constraints = null, bool useMethodPrefixForHttpMethod = true)
{
if (configuration == null)
configuration = new WebApiConfiguration(useMethodPrefixForHttpMethod);
var serviceHostFactory = new HttpServiceHostFactory { Configuration = configuration };
var webApiRoute = new WebApiRoute(routePrefix, serviceHostFactory, serviceType) { Constraints = new RouteValueDictionary(constraints) };
return webApiRoute;
}
}
ОБНОВЛЕНИЕ
Итак, основываясь на комментариях Петра ниже, я попробовал его вторую пулю.Первое не сработало.Второй дает то же исключение и вылетает на конструкции для моего класса:
public class MyRestRoute : WebApiRoute {
public MyRestRoute(string routePrefix, ServiceHostFactoryBase serviceHostFactory, Type serviceType) : base(routePrefix, serviceHostFactory, serviceType) {}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) {
return null;
}
}