小编Jos*_*osh的帖子

.net Core X Forwarded Proto无法正常工作

我正在努力让我的.net核心1.1应用程序在负载均衡器后面工作并强制执行https.我的Startup.cs中有以下设置

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider serviceProvider, IOptions<Auth0Settings> auth0Settings)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();


    var startupLogger = loggerFactory.CreateLogger<Startup>();


    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
        app.UseBrowserLink();
        startupLogger.LogInformation("In Development");
    }
    else
    {
        startupLogger.LogInformation("NOT in development");
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseMiddleware<HttpsRedirectMiddleware>();
    app.UseForwardedHeaders(new ForwardedHeadersOptions
    {
        ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
    });`
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationScheme= CookieAuthenticationDefaults.AuthenticationScheme,
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            CookieHttpOnly = true,
            SlidingExpiration = true
        });
Run Code Online (Sandbox Code Playgroud)

HttpsRedirectMiddleware用于验证LB具有X-Forwarded-Proto集合,它确实存在,并以https作为唯一值返回.当我访问该网站(https://myapp.somedomain.net)时,它知道我未经过身份验证并将我重定向到(http://myapp.somedomain.net/Account/Logon?ReturnUrl=%2f).它失去了SSL连接并切换回我的端口80..net核心文档说使用如下所示的"UseForwardedHeaders",这在我的情况下不起作用.当此切换发生时,控制台记录器没有来自中间件的任何错误或警告.

对于短期修复,我把它放在"UseForwardedHeaders"下面

    app.Use(async (context, next) =>
    {
        var xproto = context.Request.Headers["X-Forwarded-Proto"].ToString();
        if …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc .net-core

18
推荐指数
2
解决办法
6132
查看次数

sql server在触发器中执行权限错误

我有一个触发器,我想发送一个关于SalesClosing表中一行更新的电子邮件.现在,执行触发器的用户(dbuser)具有非常有限的权限.所以我希望触发器作为dbmailuser执行.有权发送电子邮件的用户.我测试了dbmailuser在以该用户身份登录时可以执行sp_send_dbmail.当触发器触发时,我得到一个错误,无法执行sp_send_dbmail.所以我以dbuser身份登录,运行EXECUTE AS LOGIN ='dbmailuser'; 并能够执行sp_send_dbmail.现在为什么我不能在触发器中这样做.我正在使用sql server 2008.下面是触发器ddl.

alter TRIGGER SalesClosingTrigger ON SalesClosing
WITH EXECUTE AS 'dbmailuser'
for insert, update
AS
BEGIN
  EXEC msdb.dbo.sp_send_dbmail
  --@profile_name = 'Test_Email_Profile',
  @recipients='testemail@test.com',
  @body = 'This is a test for Database Mail.',
  @body_format = 'TEXT',
  @subject = 'Database Mail Test'
END 
GO
Run Code Online (Sandbox Code Playgroud)

sql-server triggers sql-server-2008

10
推荐指数
2
解决办法
2万
查看次数

由于MVC3应用程序中面向对象的方法,防止重复的DB调用

我们有一个MVC3应用程序,我们创建了许多小动作和视图来处理将数据放在我们需要的任何地方.例如,如果它是一个博客,我们想要显示评论,我们有一个评论操作和视图,我们可以将它放在我们想要的任何地方,用户个人资料视图和博客文章视图等.

由于我们在应用程序中拥有的所有其他小视图,所导致的问题是每个小视图或操作需要每次页面加载多次调用同一服务.因此,在包含这些小视图的非常大的页面上,我们可能有80多个sql调用,其中40%是重复的,然后页面变慢.当前的解决方案是缓存一些数据,并在ViewBag中传递一些数据,如果我们可以这样,如果你想要用户的配置文件,你检查它的缓存或ViewBag是否没有要求它.

对于一个设计模式来说,这真的很脏,并且viewbag方法看起来很糟糕,因为它必须从顶部向下传递.我们已经在HttpCurrent.Items中添加了一些数据,以便根据请求(而不是缓存,因为数据可以更改),但是必须有一些干净的解决方案,感觉不对,也是干净的?

编辑

我被要求更具体,虽然这是一个内部业务应用程序,但我无法泄露大部分具体细节.

所以把它变成软件类比.让我们将它与facebook进行比较.想象一下,这个MVC应用程序对每个facebook帖子都有一个动作,然后在该动作下它对于like按钮和注释数量有另一个动作,然后是向用户显示最高评论的另一个动作.我们的应用程序设计方式我们会在每个操作中获取当前用户配置文件(因此在上述情况下最少为4次),然后子操作将获得父墙贴文以验证您是否有权查看它.现在你可以考虑缓存每个安全检查,墙贴等的调用,但我觉得缓存是针对应用程序生命周期中需要的东西,而不仅仅是在这里和那里的小块来纠正你的错误应用程序是架构的.

c# design-patterns asp.net-mvc-3

5
推荐指数
1
解决办法
1163
查看次数

Git - 显示上游后面的提交数量

我们的团队倾向于不跟踪最新发布的代码背后有多少提交.我们想要通知他们,但获取信息是困难的部分,通知部分已完成.

我想了解如何拉下git log,做一个git命令输出"Branch x在分支y后面提交5次提交".我不想检查分支机构,因为它每次为我们所有的分支机构下载600mb + repo,而且我的驱动器空间不足.我在堆栈溢出时发现了类似的问题,它引用了仅在本地工作的bash脚本,或者指向远程返回空白的bash脚本.我还在学习git和bash,请耐心等待.

git github

3
推荐指数
1
解决办法
1905
查看次数