HangFire 仪表板未显示在 PROD 中

HangFire dashboard not displaying in PROD

我正在使用 HangFire 来安排作业,但是当我部署到 PROD 时,website/hangfire url 无法正常工作。我收到 系统找不到指定的文件 错误。

在本地主机上,我可以打开 URL。

我关注了这个URL:http://docs.hangfire.io/en/latest/quick-start.html

任何人都知道我错过了什么。

谢谢

Hangfire Dashboard 会公开有关后台作业的敏感信息,包括方法名称和序列化参数,并让您有机会通过执行不同的操作(重试、删除、触发等)来管理它们。因此非常重要限制对仪表板的访问。

默认情况下,为了确保安全,只允许本地请求,但是您可以通过传递您自己的 IAuthorizationFilter 接口实现来更改此设置,其 Authorize 方法用于允许或禁止请求。第一步是提供您自己的实现。

http://docs.hangfire.io/en/latest/configuration/using-dashboard.html#configuring-authorization

由于 Hangfire 仪表板暴露了有关您的作业的敏感信息,其中包括方法名称和序列化参数。用户还可以执行不同的操作,如重试、触发、删除等。因此验证对仪表板的访问权限非常重要。

默认情况下,Hangfire 只允许本地请求访问仪表板页面。为了为生产或测试或 UAT 用户提供适当的权限,请使用 hangfire 仪表板的 IDashboardAuthorizationFilter 接口添加您自己的授权实现。

http://docs.hangfire.io/en/latest/configuration/configuring-authorization.html

查看下面我的示例代码

public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
{
    private readonly string[] _roles;

    public HangfireAuthorizationFilter(params string[] roles)
    {
        _roles = roles;
    }

    public bool Authorize(DashboardContext context)
    {
        var httpContext = ((AspNetCoreDashboardContext)context).HttpContext;

        //Your authorization logic goes here.

        return true; //I'am returning true for simplicity
    }
}

Asp.net 核心启动 class Configure(IApplicationBuilder app, IHostingEnvironment env) 方法的变化

Configure(IApplicationBuilder app, IHostingEnvironment env){
      ......
        app.UseHangfireServer();
        app.UseHangfireDashboard("/hangfire", new DashboardOptions
        {               
            DashboardTitle = "Sample Jobs",
            Authorization = new[]
            {
                new  HangfireAuthorizationFilter("admin")
            }
        });
      ......
      }

也许回答晚了,但可能会有用。

就我而言,我有以下代码:

  public class Startup
  {
    public void Configuration(IAppBuilder app)
    {
      #if !DEBUG
          app.UseHangfireDashboard("/hangfire", new DashboardOptions
          {
            Authorization = new[] { new HangfireAuthFilter() }
          });
       #endif
    }
   }
 }

它不适用于产品。 我意识到当我从 bin 文件夹复制应用程序 dll 时,它采用调试配置并且不会启动 hangfire。 当我通过 visual studio 发布应用程序并从发布文件夹的 bin 文件夹中复制 DLL 时,它工作正常。