首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用app.UseRewriter().Add()添加重定向时访问Startup.Configure内的dbcontext

在使用app.UseRewriter().Add()添加重定向时访问Startup.Configure内的dbcontext
EN

Stack Overflow用户
提问于 2019-05-15 02:36:08
回答 1查看 834关注 0票数 2

我需要根据主机名添加重定向,从数据库中读取源路径/目标路径的映射。

代码语言:javascript
复制
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被认为是被处理的:

在ConfigureServices中添加DbContext,如下所示(作用域):

代码语言:javascript
复制
  var connection = Configuration.GetConnectionString("DefaultConnection");
  services.AddDbContext<gommeautoContext>(options => options.UseSqlServer(connection, sqlServerOptionsAction: sqlOptions =>
  {
    sqlOptions.EnableRetryOnFailure(maxRetryCount: 5,
    maxRetryDelay: TimeSpan.FromSeconds(5),
    errorNumbersToAdd: null);
  }));

我最后一次尝试让它工作是使用下面的代码:

代码语言:javascript
复制
  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();
  }

但没帮上忙。

我假设在UseRewriter.Add(中访问dbContext不是那么简单,而且我不知道该怎么做……

有人知道吗?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56136580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档