gpt4 book ai didi

c# - 区域和子域路由

转载 作者:行者123 更新时间:2023-11-30 12:22:35 27 4
gpt4 key购买 nike

我在我的 ASP.NET Core 应用程序中创建了管理区域,并像这样更新了我的路由:

app.UseMvc(routes =>
{
routes.MapRoute(name: "areaRoute",
template: "{area:exists}/{controller=Home}/{action=Index}");

routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}");
});

我想在我的应用程序中实现子域路由,以便在我们键入 URL admin.mysite.com 时呈现我的管理区域 (mysite.com/admin)。

我看到了很多 ASP.NET MVC 5 的例子,但是我一直无法适应 ASP.NET Core。

最佳答案

我尝试了最后一个解决方案,但不适用于 ASP.NET Core 1.1

Microsoft 有一个名为 Rewrite 的 nuget 包,这是一个中间件,您可以在其中重写或重定向一些请求,但也有一种方法可以编写自定义规则,您可以在其中捕获子域并将其添加到请求路径中:

public class RewriteSubdomainRule : IRule
{
public void ApplyRule(RewriteContext context)
{
var request = context.HttpContext.Request;
var host = request.Host.Host;
// Check if the host is subdomain.domain.com or subdomain.localhost for debugging
if (Regex.IsMatch(host, @"^[A-Za-z\d]+\.(?:[A-Za-z\d]+\.[A-Za-z\d]+|localhost)$"))
{
string subdomain = host.Split('.')[0];
//modifying the request path to let the routing catch the subdomain
context.HttpContext.Request.Path = "/subdomain/" + subdomain + context.HttpContext.Request.Path;
context.Result = RuleResult.ContinueRules;
return;
}
context.Result = RuleResult.ContinueRules;
return;
}
}

在 Startup.cs 上

您必须添加中间件才能使用自定义重写规则:

 app.UseRewriter(new RewriteOptions().Add(new RewriteSubdomainRule())); 

在这一行之后,我定义了一个路由,用于接收添加在请求路径上的子域并将其分配给子域变量:

    app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");

routes.MapRoute(
name: "subdomain",
template: "subdomain/{subdomain}/{controller=Home}/{action=Index}/{id?}");
});

在 Controller 上你可以这样使用它

public async Task<IActionResult> Index(int? id, string subdomain)
{
}

关于c# - 区域和子域路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512403/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com