Мне нужно добавить перенаправления, основанные на имени хоста, читая карту пути-источника / пути-назначения из базы данных.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IMemoryCache memoryCache, ILoggerFactory loggerFactory, myDbContext db)
{
app.UseRewriter(new RewriteOptions()
.AddRedirect("(.*)/$", "$1")
.Add(ctx => {
var req = ctx.HttpContext.Request;
var hostName = req.Host;
/*
** here I am willing to use db to do something like...
*/
var redirects = db.redirect
.Where(r=> r.host == hostName ).ToList();
/*
** so that I can do something like this:
*/
var newUrl = DetermineNewUrl(req,redirects);
var response = ctx.HttpContext.Response;
response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Location] = newUrl;
response.StatusCode = 301;
ctx.Result = RuleResult.EndResponse;
}));
}
Но это не работает, потому что db предположительно расположен:
DbContext добавлен в ConfigureServices следующим образом (область действия):
var connection = Configuration.GetConnectionString("DefaultConnection");
services.AddDbContext<gommeautoContext>(options => options.UseSqlServer(connection, sqlServerOptionsAction: sqlOptions =>
{
sqlOptions.EnableRetryOnFailure(maxRetryCount: 5,
maxRetryDelay: TimeSpan.FromSeconds(5),
errorNumbersToAdd: null);
}));
И моя последняя попытка заставить его работатьследующий код:
using (var serviceScope = app.ApplicationServices.CreateScope())
{
var services = serviceScope.ServiceProvider;
var _db = services.GetService<gommeautoContext>();
var redirects = db.redirect
.Where(r=> r.host == hostName ).ToList();
}
Но это не помогло.
Я предполагаю, что не так просто получить доступ к dbContext
внутри UseRewriter.Add(
, и я не могу понять, каксделать это ...
Кто-нибудь делает?