如果你可以從CustomRoutesHandler,那麼下面的作品調用一個方法直接在RequestHandler:
CustomRoutesHandler:
public class CustomRoutesHandler : RouteBase
{
Route route;
public CustomRoutesHandler(Route route)
{
this.route = route;
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RequestHandler requestHandler = new RequestHandler();
HttpRequestMessage request = new HttpRequestMessage();
HttpResponseMessage response = requestHandler.SendAsync(request).Result;
return route.GetRouteData(httpContext);
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
return route.GetVirtualPath(requestContext, values);
}
}
RequestHandler:
public class RequestHandler : DelegatingHandler
{
public Task<HttpResponseMessage> SendAsync(HttpRequestMessage request)
{
CancellationToken cancellationToken = CancellationToken.None;
return SendAsync(request, cancellationToken);
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
var tsc = new TaskCompletionSource<HttpResponseMessage>();
tsc.SetResult(response);
return tsc.Task;
}
}
RouteConfig:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
Route route = routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.Remove(route);
routes.Add(new CustomRoutesHandler(route));
}
}