我有這樣的中間件:ASP NET核心服務於特定的HTML頁面
public class SpecificPageMiddleware
{
private readonly RequestDelegate next;
public SpecificPageMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
if (this.IsSubDomainRequest(context.Request.Host.Value))
{
if (this.IsIndexRequest(context.Request.Path.Value))
{
await this.ReturnIndexPage(context);
return;
}
}
await this.next.Invoke(context);
}
private bool IsSubDomainRequest(string host)
{
return host.StartsWith("subdomain")
|| host.Contains("subdomain");
}
private bool IsIndexRequest(string query)
{
return query == "/" || query == "/response.html";
}
private static async Task ReturnIndexPage(HttpContext context)
{
var file = new FileInfo(@"wwwroot\response.html");
byte[] buffer;
if (file.Exists)
{
context.Response.StatusCode = (int)HttpStatusCode.OK;
context.Response.ContentType = "text/html";
buffer = File.ReadAllBytes(file.FullName);
}
else
{
context.Response.StatusCode = (int)HttpStatusCode.NotFound;
context.Response.ContentType = "text/plain";
buffer = Encoding.UTF8.GetBytes("Unable to find the requested file");
}
using (var stream = context.Response.Body)
{
await stream.WriteAsync(buffer, 0, buffer.Length);
await stream.FlushAsync();
}
context.Response.ContentLength = buffer.Length;
}
}
很簡單,當我得到這樣的事情經過:subdomain.mydomain.com
我想顯示特定HTML頁面上正常的中間件管道,否則攜帶www.mydomain.com
。
當這個中間件被擊中時,它在瀏覽器中結束爲404。如果我沒有設置內容類型,那麼它會以200作爲結果,並將所有html寫成文本,而不是呈現爲html。我在這裏錯過了什麼?
我不想用app.UseDefaultFiles()
或app.UseStaticFiles()
。
你嘗試使用Fiddler2記錄的流量?也許你有一些無效的內容之前提交標題 – Tseng
我會看看,我確實看過鉻網絡請求.... –