我在ASP.NET Core应用程序中创建了Admin Area并更新了我的路由:
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?}");
});
在控制器上你可以像这样使用它
public async Task<IActionResult> Index(int? id, string subdomain)
{
}