soy capaz de registrar correctamente un controlador de ruta personalizada (que deriva de IRouteHandler) en el interior global.asax.cs para un ala ruta Web API:manipuladores de ruta personalizada en ASP.Net WebAPI
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{client}/api/1.0/{controller}/{action}/{id}",
defaults: new{id = UrlParameter.Optional}
).RouteHandler = new SingleActionAPIRouteHandler();
Sin embargo, puedo Parece que no hay forma de hacerlo cuando intento configurar un host en memoria para la API para las pruebas de integración. Cuando llamo a HttpConfiguration.Routes.MapRoute, no puedo configurar un controlador en IHttpRoute devuelto.
¿Debo hacer esto de otra manera (por ejemplo, usando un HttpControllerSelector personalizado)? Obviamente, me gustaría hacerlo de la misma manera en ambos casos.
Gracias, Matt
EDIT:
Así que lo que terminó haciendo fue básicamente siguiendo el consejo desde abajo, sino simplemente reemplazando la clase HttpControllerDispatcher de la siguiente manera:
public class CustomHttpControllerDispatcher : HttpControllerDispatcher
{
public CustomHttpControllerDispatcher(HttpConfiguration configuration) : base(configuration)
{
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// My stuff here
return base.SendAsync(request, cancellationToken);
}
}
Muchas gracias Marcos, voy a admitir que soy bastante nuevo en la parte interna del marco WebAPI, ¿podría explicar por qué este enfoque es mejor que el suministro de una costumbre a la IHttpControllerSelector ¿configuración?Parece que HttpControllerDispatcher predeterminado usa ControllerSelector definido en la configuración para encargarse del trabajo que estoy buscando hacer. – mattcole
@mattcole Debería haberlo tenido un poco más claro, quería confirmar que está en lo cierto y sospecho (como ya lo hizo) que debería echarle un vistazo a HttpControllerSelector personalizado http://netmvc.blogspot.co.uk/como preferencia si todo lo que estás haciendo es reenviar a un controlador. Solo pensaba que tal vez estabas haciendo algo más que elegir controladores y quizás querías usar otros controladores además del controlador, etc ... La idea de CustomHttpControllerDispatcher fue un poco de juguete y experimento ... lo siento por no ser más claro. –
No hay problema Mark, al final fui con una versión de lo que sugirió, ya que solo estaba cambiando algunos valores en los valores de ruta, simplemente anulé el método SendAsync, hice mi trabajo y luego dejé que la tubería continuara en su camino. – mattcole