12

ASP.NET Web Api'deki yönlendirme taban sınıflarında küçük bir fark buldum ve bu da bana yollarımı tanımlamamı sağlayacak küçük bir yardımcı sınıf yazmam için zorladı Sadece bir kere. Bunun için bir sebep var mı? Bu beni tanır Ne çerçevesinde bir değişiklik hem RouteCollection ler aynı temel sınıf türetmek yapmak veya (daha basit bu sınıfı yapmış olur) aynı arayüzASP.NET Web Api Yönlendirme (Kendi Kendine Barındırılan IIS)

public static class RouteMapper 
{ 
    private class Route 
    { 
     public string Name { get; set; } 
     public string Template { get; set; } 
     public object Defaults { get; set; } 

     public Route(string name, string template, object defaults) 
     { 
      Name = name; 
      Template = template; 
      Defaults = defaults; 
     } 
    } 

    private static List<Route> GetRoutes() 
    { 
     return new List<Route> 
        { 
         new Route(
          "API Default", 
          "api/{controller}/{id}", 
          new {id = RouteParameter.Optional}) 
        }; 
    } 

    public static void AddHttpRoutes(this HttpRouteCollection routeCollection) 
    { 
     var routes = GetRoutes(); 
     routes.ForEach(route => routeCollection.MapHttpRoute(route.Name, route.Template, route.Defaults)); 
    } 

    public static void AddHttpRoutes(this RouteCollection routeCollection) 
    { 
     var routes = GetRoutes(); 
     routes.ForEach(route => routeCollection.MapHttpRoute(route.Name, route.Template, route.Defaults));    
    } 
} 

uygulamak çok büyüktü varsayıyorum Bunu yapmak, hem Global.asax hem de tümleştirme testlerimde basit bir AddHttpRoutes yöntemini çağırmaktır.

Entegrasyon

 var configuration = new HttpSelfHostConfiguration("http://localhost:20000"); 
     configuration.Routes.AddHttpRoutes(); 

     _server = new HttpSelfHostServer(configuration); 
     _server.OpenAsync().Wait(); 

Global.asax

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.AddHttpRoutes(); 

     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

bu bilinen bir sorun var mı ve ASP.NET Web Api sonraki bir sürümde düzeltilecektir muhtemeldir Testleri?

+0

Harika bir örnek kod, tüm yönlendirme kodunu özgün RouteConfig.cs dosyasının içinde tutmak için biraz değiştirdim. – angularsen

cevap

4

Evet, ASP.NET'in zaten yönlendirmesi nedeniyle yönlendirme biraz farklıdır, ancak doğrudan kendi kendine destek vermeyi engelleyeceğinden, buna doğrudan bağlı olamayız. Hala şeylerin nasıl daha mantıklı olabileceğine bakıyoruz.

+0

Sanırım her ikisi de ortak bir arayüz uygulamak için değiştirildiyse, o zaman bir uzatma yöntemi kullanılabilir ve yönlendirme sadece bir yerde yapılmalıdır. Yaptığım şeye benzer, ancak sadece tek bir uzantı yöntemiyle. Eminim bundan daha akıllı bir şeyle gelirsin :) –

İlgili konular