asp.net-mvc-routing – ASP.NET Web Api路由(IIS vs Self Hosted)

我发现在ASP.NET Web Api中的路由基类中有一个小的区别,这迫使我写了一个小帮手类,这样我就可以定义一次路由.有没有理由呢?我假设框架太大了,使得两个RouteCollections都是从同一个基类派生出来的,或者实现了同一个接口(这样可以使这个类更简单)
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.Defaults));            
    }
}

这允许我做的是在我的Global.asax和我的集成测试中调用一个简单的AddHttpRoutes方法.

集成测试

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 }
        );
    }

这是一个已知的问题,它是否可能在ASP.NET Web Api的更高版本中得到修复?

解决方法

是的,由于ASP.NET已经有路由,但是我们不能直接依赖它,因为这样会阻止自主主机的支持,路由有些不同.我们仍然在看待事情如何变得更有意义.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....