.net core 如何将默认网站URL重定向到.NETCore中的自定义URL?

.net core 如何将默认网站URL重定向到.NETCore中的自定义URL?,.net-core,routing,asp.net-core-mvc,.net Core,Routing,Asp.net Core Mvc,我确信这很简单,我只是不懂一些东西,但有人能解释一下我如何将我的myDomain.com/或localhost:12345/URL重定向到类似myDomain.com/lang/Controller/Index或localhost:12345/lang/Controller/Index? 我在Startup.cs中的路由如下所示: app.UseMvc(路由=> { routes.MapRoute( 名称:“LocalizedDefault”, 模板:“{culture:culture}/{co

我确信这很简单,我只是不懂一些东西,但有人能解释一下我如何将我的
myDomain.com/
localhost:12345/
URL重定向到类似
myDomain.com/lang/Controller/Index
localhost:12345/lang/Controller/Index?

我在
Startup.cs
中的路由如下所示:

app.UseMvc(路由=>
{
routes.MapRoute(
名称:“LocalizedDefault”,
模板:“{culture:culture}/{controller=Home}/{action=Index}/{id?}”);
routes.MapRoute(
名称:“默认”,
模板:“{*catchall}”,
默认值:新建{controller=“Home”,action=“RedirectToDefaultLanguage”,culture=“en”});
});

现在,我已经修改了
launchSettings.json
文件,以在我想要的URL上启动,但是这种类型的解决方案不是很灵活,一旦我开始使用服务器,我将被迫重定向对
myDomain.com
的请求。提前谢谢

没关系,这真是个愚蠢的问题。只需对默认URL上要调用的任何控制器操作使用
[Route(“”)
属性。

首先修改路由定义:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "LocalizedDefault",
        template: "{culture:regex(^[a-zA-Z]{{2}}(?:-[a-zA-Z]{{2}})*$)}/{controller=Home}/{action=Index}/{id?}"
        );
    routes.MapRoute(
        name: "default",
        template: "{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "RedirectToDefaultLanguage" }
        );
});
为了避免过多的重定向,您不希望使用catchall路由。请注意,我使用regex约束来确保区域性是两个字母格式(en,it,fr)或基本标记名称(en-US,it,…)。如果您想要完全符合rfc4647,您需要更改
^[A-Za-z]{1,8}(?:-[A-Za-z0-9]{1,8})*$
,但我认为这太多了(除非您计划提供I-klingon网站XD)

然后在HomeController中重定向到默认语言操作:

public IActionResult RedirectToDefaultLanguage()
{
    var currentCulture = Request.RouteValues["culture"];
    var dest = Request.Path.Value == "/" ? "" : Request.Path.Value;
    if (!string.IsNullOrWhiteSpace(Request.QueryString.Value))
        dest += $"?{Request.QueryString}";
    if (currentCulture == null)
    {
        return RedirectPermanent($"/en{dest}");
    }
    return RedirectToActionPermanent($"{currentCulture}{dest}");
}