Я использую AspNetCore.Proxy для проксирования вызова ресурса stati c внешней службе. Я провожу предварительную обработку, чтобы проверить пользователя и создать URL-адрес внешней службы (которую я хочу скрыть от пользователя).
В моем Startup.Configure () у меня есть это:
app.UseProxies(builder =>
{
builder.Map("attached_resource/{id}", proxy =>
{
proxy.UseHttp((context, arguments) =>
{
var scope = context.RequestServices
.GetRequiredService<IServiceScopeFactory>().CreateScope();
using (scope)
{
var attachedResourceService = scope.ServiceProvider.GetService<AttachedResourceService>();
var providerContext = scope.ServiceProvider.GetService<ContentProviderContext>();
var resourceId = int.Parse(arguments["id"].ToString());
var sourceUrl = attachedResourceService.GetProviderResourceUrl(resourceId, providerContext.User.Id);
context.Request.Method = "POST";
context.Request.Headers.Add("auth", providerContext.User.Token);
return sourceUrl.Url;
}
});
});
});
Странная вещь; это работает, но только при вызове из почтальона, непосредственно из адресной строки в браузере или со страницы c HTML. НО ... он возвращает 403 каждый раз, когда я делаю запрос ресурса из своего собственного приложения, например, из представления или шаблона.
Итак, когда я добавляю тег img в stati c local plain HTML страница работает:
<img src="https://localhost:5001/attached_resource/104" />
Когда я помещаю ТОЧНЫЙ тот же тег img в представление или макет .cs html, консоль chrome (и asp. net основной терминал приложения) показывает возврат 403.
Использование asp. net core 3.1 с несколькими компонентами Blazor, отображаемыми на стороне сервера. Итак, простое приложение MVC, а не полноценное приложение Blazor.
Мне, должно быть, не хватает чего-то очень очевидного. Любые идеи? Спасибо, что подумали вместе со мной.