- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试访问 localhost:5000/hangfire 时,我被重定向到错误页面(我有一个返回相对状态页面(400,404 等)的 Controller )
这是我得到的错误:
我想/hangfire 不存在。它所指的“HandeErrorCode”来自我的 Controller 。
[Route ("Error/{statusCode}")]
public IActionResult HandleErrorCode (int statusCode) {
var statusCodeData =
HttpContext.Features.Get<IStatusCodeReExecuteFeature> ();
switch (statusCode) {
case 404:
return View("Status404");
case 401:
return View("Status401");
case 400:
return View("Status400");
case 500:
return View("Status500");
}
return View ();
}
services.AddHangfire(configuration=>{
configuration.UsePostgreSqlStorage(connectionString);
});
app.UseHangfireDashboard("/hangfire");
app.UseHangfireServer();
public class Startup {
public Startup (IHostingEnvironment env) {
Console.WriteLine ("startin app {0}, which uses env {1} and has root {2}", env.ApplicationName, env.EnvironmentName, env.ContentRootPath);
Configuration = new ConfigurationBuilder ()
.SetBasePath (env.ContentRootPath)
.AddJsonFile ("appsettings.json", optional : true, reloadOnChange : true)
.AddJsonFile ($"appsettings.{env.EnvironmentName}.json", optional : true)
.AddEnvironmentVariables ()
.Build ();
Console.WriteLine ("Current env variables are as follows: ");
var enumerator = Environment.GetEnvironmentVariables ().GetEnumerator ();
while (enumerator.MoveNext ()) {
Console.WriteLine ($"{enumerator.Key,5}:{enumerator.Value,100}");
}
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices (IServiceCollection services) {
services.AddMvc ();
// Add framework services.
var connectionString = Configuration["ConnectionStrings:DefaultConnection"];
Console.WriteLine ("using conn str: {0}", connectionString);
services.AddEntityFrameworkNpgsql ()
.AddDbContext<EntityContext> (
options => options.UseNpgsql (connectionString)
);
services.AddIdentity<User, Role> (config => {
config.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<EntityContext> ()
.AddDefaultTokenProviders ();
services.Configure<IdentityOptions> (options => {
options.Password.RequireDigit = false;
options.Password.RequiredLength = 5;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
});
services.ConfigureApplicationCookie (options => options.LoginPath = "/account/login");
services.AddAuthentication (CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie (options => {
options.LoginPath = "/Account/Login";
options.LogoutPath = "/Account/Logout";
});
// SERVICE FILTERS
services.AddScoped<ActivePackageFilterAttribute, ActivePackageFilterAttribute> ();
services.AddScoped<ActiveUserFilterAttribute, ActiveUserFilterAttribute> ();
services.AddSingleton<AccountBilling, AccountBilling> ();
services.AddMemoryCache ();
services.AddHangfire (configuration => {
configuration.UsePostgreSqlStorage (connectionString);
});
services.AddMvc (config => {
config.ModelBinderProviders.Insert (0, new InvariantDecimalModelBinderProvider ());
//config.Filters.Add(typeof(RedirectActionFilter));
})
.SetCompatibilityVersion (CompatibilityVersion.Version_2_2)
.AddJsonOptions (options => {
options.SerializerSettings.ContractResolver = new DefaultContractResolver ();
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
})
.AddViewLocalization (LanguageViewLocationExpanderFormat.Suffix, opts => { opts.ResourcesPath = "Resources"; })
.AddDataAnnotationsLocalization ();
//services.AddScoped<RedirectActionFilter>();
services.AddAutoMapper ();
services.AddSingleton<AutoMapper.IConfigurationProvider> (Automapper.AutoMapperConfig.RegisterMappings ());
//services.AddSingleton(Mapper.Configuration);
services.AddScoped<IMapper> (sp => new Mapper (sp.GetRequiredService<AutoMapper.IConfigurationProvider> (), sp.GetService));
services.AddDistributedMemoryCache (); // Adds a default in-memory implementation of IDistributedCache
services.AddSession ();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender> ();
services.AddTransient<ISmsSender, AuthMessageSender> ();
services.AddScoped<IRepository, Repository> ();
services.AddScoped<Context, Context> ();
services.AddScoped<IAccountBilling, AccountBilling> ();
services.Configure<AdministratorEmailAddress> (Configuration);
services.Configure<AuthMessageSenderOptions> (Configuration);
services.Configure<TBCPaymentOptions> (Configuration);
services.AddScoped<ViewRender, ViewRender> ();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor> ();
services.Configure<RequestLocalizationOptions> (opts => {
var supportedCultures = new [] {
new CultureInfo ("en"),
new CultureInfo ("ka"),
new CultureInfo ("ru")
};
opts.DefaultRequestCulture = new RequestCulture ("ka");
// Formatting numbers, dates, etc.
opts.SupportedCultures = supportedCultures;
// UI strings that we have localized.
opts.SupportedUICultures = supportedCultures;
});
// Add converter to DI
//services.AddSingleton(typeof(IConverter), new BasicConverter(new PdfTools()));
services.AddSingleton<ITemplateService, TemplateService> ();
services.AddSingleton (typeof (IConverter), new SynchronizedConverter (new PdfTools ()));
services.AddScoped<MailComposer> ();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure (IApplicationBuilder app, IHostingEnvironment env) {
if (env.IsDevelopment ()) {
app.UseDeveloperExceptionPage ();
app.UseDatabaseErrorPage ();
} else {
app.UseStatusCodePagesWithReExecute ("/Error/{0}");
}
app.UseStaticFiles ();
app.UseAuthentication ();
app.UseForwardedHeaders (new ForwardedHeadersOptions {
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>> ();
app.UseRequestLocalization (options.Value);
app.UseSession ();
// app.UseHangfireDashboard ("/hangfire", new DashboardOptions {
// Authorization = new [] { new HangFireAuthorization () }
// });
app.UseHangfireDashboard ();
app.UseHangfireServer ();
RecurringJob.AddOrUpdate<IAccountBilling> (a => a.CheckUserPayment (), Cron.Minutely);
RecurringJob.AddOrUpdate<IAccountBilling> ("CalculateUserCharge", a => a.CalculateUserCharge (DateTime.Today.AddDays (-1)), Cron.Daily (21, 00), TimeZoneInfo.Utc);
//RecurringJob.AddOrUpdate<IAccountBilling>("CalculateUserCharge",a=>a.CalculateUserCharge(DateTime.Today.AddDays(-1)),Cron.Minutely);
app.UseMvc (routes => {
routes.MapRoute (
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
public class HangFireAuthorization: IDashboardAuthorizationFilter{
public bool Authorize([NotNull] DashboardContext context)
{
return context.GetHttpContext().User.IsInRole("Administrator");
}
最佳答案
对于 Hangfire Dashboard
,它会公开有关后台作业的敏感信息,包括方法名称和序列化参数,并让您有机会通过执行不同的操作(重试、删除、触发等)来管理它们。因此,限制对仪表板的访问非常重要.
为了使其安全,默认情况下只允许本地请求,但是您可以通过传递您自己的 IDashboardAuthorizationFilter 接口(interface)实现来更改此设置,该接口(interface)的 Authorize 方法用于允许或禁止请求。第一步是提供您自己的实现。
引用 Configuring Authorization
更新:
对于这种行为,这在上面有描述,并由 HangfireApplicationBuilderExtensions 控制。 .它注册了 LocalRequestsOnlyAuthorizationFilter .
如果要启用非本地主机的请求,则需要提供 DashboardOptions
.
关于c# - 无法访问hangfire仪表板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57165947/
我已经能够在我的 Centos 7 服务器上成功设置 kubernetes。 在遵循 documentation 之后尝试使仪表板工作,运行“kubectl 代理”它 尝试使用 127.0.0.1:9
我正在尝试为用作仪表板的网络应用程序设计数据库架构。 可以有任意数量的仪表板(用户可以创建新的仪表板) 每个仪表板都与团队相关联(每个仪表板大约 10-25 个团队) 每个团队都有成员(每个团队约 1
我已经在 Windows VM 上部署了 minikube,并且 minikube VM 是在 Virtualbox 上使用仅主机 IP 创建的。 我已经使用 NodePort IP 部署了 Kube
我刚刚安装了 xampp-win32-5.5.30 并且在 xampp 控制面板中 Apache 和 mysql 都启动没有任何错误,但我发现: 1) 本地主机 在我的浏览器中重定向到另一个页面 本地
我是 ReactJS 的新手。我想在我的项目中使用 ReactJS-AdminLTE。谁能告诉我如何逐步使用它。 我遵循的步骤 1) 我使用 https://www.tutorialspoint.co
我们正在创建一个仪表板,用于显示给定系统在一段时间内(具体来说是过去 24 小时)内的异常数量。该图如下所示: 如果您仔细观察,最后一个柱形图是一天前的,而不是今天(请参阅图表中最后一个柱形图生成的时
我已经通过 Kubespray 成功部署了 Kubernetes,一切似乎都工作正常。我可以通过 kubectl 访问集群并列出节点、pod、服务、 secret 等。还可以应用新资源,仪表板端点可以
我在本地使用 KUBEADM 工具配置了具有 1 个主节点和 4 个工作节点的 kubernetes 集群。所有节点都运行良好。部署了一个应用程序并能够从浏览器访问该应用程序。我尝试了很多方法来使用
我们正在创建一个仪表板,用于显示给定系统在一段时间内(具体来说是过去 24 小时)内的异常数量。该图如下所示: 如果您仔细观察,最后一个柱形图是一天前的,而不是今天(请参阅图表中最后一个柱形图生成的时
我在 DashBoard Demo 看到了 PrimeFaces 仪表板演示。我目前有 PrimeFaces 1.1 jar。它可以工作还是我必须升级到下一个版本?我正在使用 JSF 1.2 和 Se
我不熟悉 Bootstrap 、HTML 以及与 Web 开发有关的所有内容。我正在使用 bootstrap 构建仪表板,我设法使基本布局正确。我的仪表板有一个顶部和侧面导航栏。 我现在想在不同页面之
这个问题在这里已经有了答案: Starting Shiny app after password input (6 个答案) 关闭 2 年前。 我正在制作一个 Shiny 的应用程序,它将显示一个仪
我正在尝试将 Grafana 仪表板的导入复制到 Grafana。 我正在使用下一个模块: - name: Export dashboard grafana_dashboard: graf
我按照本指南 link安装 kubernetes 集群,我没有错误,但我无法访问 kubernetes-Dashboard 我做了kubectl create -f https://rawgit.co
我们现在正在使用 Apache JMeter 3.1,并且对新功能 Dashboard 生成非常感兴趣。我们可以使用“-g”选项生成它并且它工作正常。 但我们也有兴趣自定义仪表板。例如: 从第一页删除
我是 wordpress 的新手,对某些东西有点困惑。我正在尝试为自己建立一个分类市场类型的网站。我不是为“客户” build 这个。由于我的编码技能达不到标准,我可能会使用几个不同的插件。最终,我希
是否可以有一个受限的 Kubernetes 仪表板?这个想法是让一个 pod 在集群中运行 kubectl proxy(受基本 HTTP 身份验证保护)以快速了解状态: pod 的日志输出 运行服务和
有人可以解释一下如何用 cocoa 读取(或至少下载为 XML 格式)吗?我就这样试过了。这可能是完全错误的:)。 NSMutableURLRequest* request = [[NSMutable
我想将我自己的部分添加到 umbraco 仪表板,以便我可以将我自己的管理部分集成到现有的登录/管理结构中。如果不编辑和重新编译 umbraco 源代码本身,这可能吗?是否推荐?如果是这样,是否有人有
我正在尝试使用配置文件访问 kubernetes 仪表板。从我选择配置文件时的身份验证中,它给出了‘ Not enough data to create auth info structure .’但
我是一名优秀的程序员,十分优秀!