首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP.NET核2中的扩展路由

ASP.NET核2中的扩展路由
EN

Stack Overflow用户
提问于 2017-12-13 07:35:54
回答 1查看 2.7K关注 0票数 1

我目前正在迁移一个旧的网站从ASP.NET与.htaccess到ASP.NET核心2,我面临一些问题的路由。这是一个大的网站,几乎有30个链接,我必须保持与旧的网址结构。因此,我尝试扩展Startup类的app.UseMvc(route)函数。

这是我的代码:

代码语言:javascript
复制
public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseMvc(routes => new CustomRouting("mydomain.com",app).GetRouts());
    }
}

以下是我的其他课程:

代码语言:javascript
复制
public class CustomRouting
{
    string domain;
    IApplicationBuilder app;

    public CustomRouting(string domain, IApplicationBuilder app)
    {
        this.domain = domain;
        this.app = app;
    }

    public IRouteBuilder GetRouts()
    {
        IRouteBuilder route = new RouteBuilder(app);
        switch(domain)
        {
            case "mydomain.com":
                route = new DeRouting(app).GetRoutes();
                break;
            default:
                route = new DeRouting(app).GetRoutes();
                break;
        }
        return route;
    }
}

public class DeRouting
{
    IApplicationBuilder app;
    public DeRouting(IApplicationBuilder app)
    {
        this.app = app;
    }

    public IRouteBuilder GetRoutes()
    {
        IRouteBuilder routes = new RouteBuilder(app);
        routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
        //here should come more
        return routes;
    }
}

目前,我得到以下错误:

Microsoft.AspNetCore.Routing.RouteCreationException:‘必须在IRouteBuilder上设置默认处理程序。’

如何为这些规则创建路由集合?将有更多类型的这些url将处理多个域。

EN

回答 1

Stack Overflow用户

发布于 2018-05-23 08:34:35

代码语言:javascript
复制
public class CustomRouting
{
    string domain;
    IApplicationBuilder app;
    IRouteBuilder routeBuilder;

    public CustomRouting(string domain, IApplicationBuilder app, IRouteBuilder routes)
    {
        this.domain = domain;
        this.app = app;
        this.routeBuilder = routes;
    }

    public IRouteBuilder GetRouts()
    {
        switch(domain)
        {
            case "mydomain.com":
                route = new DeRouting(app, routeBuilder).GetRoutes();
                break;
            default:
                route = new DeRouting(app, routeBuilder).GetRoutes();
                break;
        }

        return route;
    }
}

public class DeRouting
{
    IApplicationBuilder app;
    IRouteBuilder routeBuilder;

    public DeRouting(IApplicationBuilder app, IRouteBuilder routes)
    {
        this.app = app;
        this.routeBuilder = routes;
    }

    public IRouteBuilder GetRoutes()
    {
        routeBuilder.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
        //here should come more
        return routes;
    }
}

// StartUp.cs
app.UseMvc(routes =>
{
    new RouteManager(app,routes).GetRoutes();
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47787751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档