Я помещаю в свой MiddleWare все, что критично для производительности. В MiddleWare вы можете проверить хост и / или путь и записать файл непосредственно в поток ответов и замкнуть возврат.
Вам просто нужно добавить класс MiddleWare, который выглядит примерно так:
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
public class Middle
{
private readonly RequestDelegate _next;
public Middle(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
string req_path = context.Request.Path.Value;
string host = context.Request.Host.Value;
if (host.StartsWith("photos.")) {
context.Response.Clear();
context.Response.StatusCode = 200;
context.Response.ContentType = "<Image Type>";
await context.Response.SendFileAsync(<file path>);
return;
}
else {
await _next.Invoke(context);
}
}
}
Тогда в вашем методе Configure Startup.cs вы должны использовать MiddleWare:
app.UseMiddleware<Middle>();
То, как ваш сервер обрабатывает поддомен и пустой домен, зависит от одного и того же приложения. на каком сервере вы используете. В IIS вы можете просто создать 2 разных сайта, которые направлены на одно и то же приложение и использовать один и тот же пул приложений (по крайней мере, это работало в старых .NET). Вы также можете просто дать сайту изображений уникальный номер порта, потому что я думаю, что файлы cookie являются специфическими для комбо порта хоста.
Вы должны убедиться, что это промежуточное программное обеспечение запускается первым, поэтому оно может предотвратитьчто-нибудь после этого от запуска. Если, конечно, вы не хотите, чтобы какая-то аутентификация выполнялась для статического контента