asp.net-core - 检测来自 .NET 核心中间件的静态文件请求

标签 asp.net-core middleware

我正在编写一些中间件来解析给定请求 URL 的子域以确定网站主题。我想忽略静态文件请求以减少不必要的数据库查找,我想知道是否有更简洁的方法来做到这一点。

这是我迄今为止尝试过的:

var staticFileExtensions = new List<string> { ".css", ".js", ".png", ".ico" };
if (staticFileExtensions.Any(x => httpContext.Request.Path.Value.EndsWith(x)))
{
    await _next(httpContext);
}
else
{
    var hostParts = httpContext.Request.Host.Host.Split('.').ToList();
    if (httpContext.Request.Path.StartsWithSegments(new PathString("/healthcheck"))
    || (hostParts.Count == 6 && _whitelistedDomains.Contains(hostParts[0])))
    {
        httpContext.Items.Add("account", hostParts[0]);
        await _next(httpContext);
    }
    else
    {
        httpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
    }
}

这是我将它添加到 Startup.cs 的地方:
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseDomainWhitelisting();

感觉好像应该有一种更干净的方法来检测要忽略哪些请求,或者我可能遗漏了什么?

最佳答案

您可以根据请求使用条件中间件。
就像是:

app.UseMiddlewareOne();

app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
    appBuilder.UseMiddlewareTwo();
});

app.UseMiddlewareThree();
来源:
https://www.devtrends.co.uk/blog/conditional-middleware-based-on-request-in-asp.net-core

关于asp.net-core - 检测来自 .NET 核心中间件的静态文件请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59928836/

相关文章:

docker - 运行.net核心docker镜像,表示应用程序已启动,但在浏览时出现 “This site can’无法达到的错误

asp.net-core - Service Fabric 本地集群上的托管环境 Asp.net Core

javascript - 从快速中间件中排除路由

即使添加中间件后 CSS 文件也未加载

asp.net - ASP.NET Core (ASP.NET 5) 应用程序中有哪些可用框架?

javascript - 如何存储 DIV 值? (鹅毛笔)

laravel - 将 'auth' 中间件与子域一起使用

node.js - 中间件不重定向

javascript - 为什么我的应用程序没有到达 console.log?

c# - 如何在 ASP.NET Core 应用程序中的 Docker 上正确安装证书?