【问题标题】:Alternate for CustomErrors Mode = "RemoteOnly" in Asp.NetCore web applications在 Asp.Net Core Web 应用程序中替代 CustomErrors Mode = "RemoteOnly"
【发布时间】:2019-09-05 11:09:46
【问题描述】:

我有一个 AspNet Core Web 应用程序,我只想在有人远程访问该应用程序时显示自定义错误。如果在本地访问此应用程序,我想为开发人员保留详细的错误页面。在 .netFramework 4.x 和更早的版本中,我们可以在 web.config customErrors 属性中使用 mode=RemoteOnly 指定它。我知道我们可以让 ASPNETCORE_ENVIRONMENT 变量的用户打开 aspnetcore 中的自定义错误或开发人员异常页面。但我正在寻找的是 - 在 AspNetCore 中为 CustomErrors mode = RemoteOnly 提供类似的功能。

【问题讨论】:

  • 问题是在Startup中配置错误处理时,没有活动请求,因此无法确定它是否“远程”。您可能需要为此创建某种自定义中间件,但这远远超出了 Stack Overflow 的范围。您需要自己进行研究并首先尝试自己的解决方案。
  • 没错。我们不能在启动时检查 Request.IsLocal = true。谢谢!

标签: c# asp.net exception asp.net-core web-config


【解决方案1】:

要直接回答您的问题,我不认为 Web.config 中的 CustomErrors 键可以直接替换。但是,IHostingEnvironment 接口上还有一些可用的方法可能对您有用,具体取决于您尝试实现的内容。例如,您可以检查多个环境:

if (env.IsProduction() || env.IsStaging() || env.IsEnvironment("Staging_2"))
{
    // Handle the custom errors here
}

有关于实现环境特定功能here的不同方法的体面文档。

【讨论】:

  • 您能否进一步说明检查多个环境如何足以检查请求是在本地还是远程发出的?我只是想确保我没有遗漏任何关于我对 ASPNETCORE_ENVIRONMENT 变量的理解。
  • 大概您知道哪些环境(Staging、Production 等)正在远程客户端上运行,哪些环境应该在本地运行(开发)。根据这些环境,您可以根据需要处理异常。
  • 这个答案根本没有帮助。 OP 想要类似于 RemoteOnly 的东西。使用该设置,同一环境中的同一站点将向远程客户端返回错误页面,但在本地主机上返回开发人员异常页面。因此,这不能通过环境来完成,因为无论请求的来源如何,它始终是同一个环境。
  • 没有。环境是在应用程序启动时通过ASPNETCORE_ENVIRONMENT 环境变量的值确定的。这不会因每个请求而改变,也不会基于该请求的来源而改变。如果它设置为Production,那么它总是 Production,不管它是否通过本地主机。
  • @ChrisPratt 我想你在 “这不能通过环境完成,因为无论请求的来源如何,它总是相同的环境”https://localhost/... 的请求不会被确定为开发环境,而https://prodDomain/... 的请求不会被确定为生产环境吗? (只要在hosts上配置好环境)
猜你喜欢
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 2018-11-30
  • 1970-01-01
  • 2014-01-17
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多