MVC路由 .net Core

5
在我之前的.NET应用程序中,我在route.config文件中使用了以下路由配置:
routes.MapRoute(
name: "Default",
url: "{tenant}/{controller}/{action}/{id}",
defaults: new { tenant = "GRE", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

现在我正在转向 .Net Core,但是我无法在 startup.cs 中设置类似的路由。

我尝试了以下方式,但它从未被匹配到:

 app.UseMvc(routes =>
            {  
                routes.MapRoute("testroute", "{tenant}/{controller}/{action}/{id}",
                        defaults: new { tenant = "GRE", controller = "Home", action = "Index" });

            });

HomeController.cs

public IActionResult Index(string tenant)
        {
            return View();
        }

希望能得到任何有关如何使其工作的帮助或提示。

谢谢。

1个回答

3

你的id参数,在 asp.net mvc 代码中是可选的,但在 asp.net core 代码中不是可选的,并且没有默认值,因此它与之前的代码不匹配。为了使其变为可选的,可以在名称后添加 "?",或设置一个默认值:

app.UseMvc(routes =>
{
    routes.MapRoute("testroute", "{tenant}/{controller}/{action}/{id?}",
        defaults: new { tenant = "GRE", controller = "Home", action = "Index" });

});

您还可以像这样内联设置默认值:

routes.MapRoute("testroute", "{tenant=GRE}/{controller=Home}/{action=Index}/{id?}");

为了让其他人受益,现在我能够从以下操作的URL中获取我的租户:http://localhost:25623/GRE/Home/Index 或者
http://localhost:25623/TOEFL/Home/Index ,根据被调用的内容,我会收到GRE或TOEFL。
- Srééjîth Náîr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接