2016-06-28 25 views
2

我有用MVC編寫的視圖。我'下面的方法將所有請求轉發給MVC中的委託處理程序

public class CustomRoutesHandler : RouteBase 
{ 
    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     //my code 
    } 
} 

在這裏,我想將所有請求定製DelegateHandler小號的SendAsync()方法捕捉在CustomRouteFilter的所有請求。誰能幫我。

public class RequestHandler : DelegatingHandler 
{ 
    protected override async Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     //my code 
    } 
} 

回答

0

如果你可以從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)); 
    } 
} 
相關問題