ASP.NET Web APIのルーティングベースクラスに軽微な違いがあることがわかりました。これにより、私は自分のルートを定義できる小さなヘルパークラスを作成するようになりました一度だけ。これには理由がありますか?私はこれが私を可能に何ASP.NET Web Apiルーティング(IISとSelf Hosted)
それは両方RouteCollection
は同じ基本クラスから派生するか(このクラスは非常に簡単になるだろう)同じインターフェイスを実装させるためのフレームワークへの変更は大きすぎた
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));
}
}
を想定しています私のGlobal.asaxと私の統合テストの両方で単純なAddHttpRoutes
メソッドを呼び出すことです。
統合は、これは既知の問題であり、それはASP.NETのWeb APIを将来のリリースで修正される可能性がある
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 }
);
}
をテスト?
このコード例では、元のRouteConfig.csファイル内にすべてのルーティングコードを保存するように少し修正しました。 – angularsen