【发布时间】:2019-03-05 11:20:16
【问题描述】:
我正在为子域使用中间件。中间件更改Request.Path如下:
网址:
http://sub1.example.com
请求.路径:
/SubdomainPages/sub1
这行得通。但是当 URL 包含一个页面(例如http://sub1.example.com/SomePage)时,我得到一个空白页面。当我在OnGet 处理程序中使用NotFound() 操作结果时,会发生同样的事情(我有/Pages/Errors/404.cshtml)。
当我不使用中间件时,带有NotFound() 的页面和重定向错误页面运行良好。
这是子域中间件:
public class SubdomainRoutingMiddleware
{
private readonly RequestDelegate _next;
public SubdomainRoutingMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
string[] Subdomains = new string[] { "sub1", "sub2" };
var parts = context.Request.Host.Value.Split('.');
if (parts.Length > 2)
{
if (Subdomains.Contains(parts[0]))
{
if (context.Request.Path.Value != "/")
context.Request.QueryString = context.Request.QueryString.Add("sayfa", context.Request.Path.Value.Substring(1));
context.Request.Path = "/SubdomainPages/" + parts[0];
}
}
await _next.Invoke(context);
}
}
这是 Startup.cs 文件:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStatusCodePages();
app.UseStatusCodePagesWithReExecute("/Errors/{0}");
app.UseStaticFiles();
app.UseMiddleware<SubdomainRoutingMiddleware>();
app.UseMvc();
}
}
编辑:
当URL包含页面时,Request.Path用中间件改变,路径变成如下:
网址:
http://sub1.example.com/SomePage
请求.路径:
/SubdomainPages/sub1/SomePage
/SomePage 存在但/SubdomainPages/sub1/SomePage 不存在。这是错误的一部分。
我还将app.UseStatusCodePages() 添加到Startup.cs。但是当 URL 包含子域时仍然无法工作/调用 404 页面。并且不显示像Status Code: 404; Not Found 这样的状态消息。仍然显示空白页。
【问题讨论】:
-
当你说“但是当 URL 包含一个页面时......”是什么意思?例如,您的意思是 URL 是
http://sub1.example.com/SomePage? -
是的,没错。
标签: asp.net-core subdomain razor-pages