【问题标题】:Base Url without Request object没有请求对象的基本 URL
【发布时间】:2014-08-21 21:46:51
【问题描述】:

根据我的代码,我需要在应用程序启动时进行一些缓存,这需要时间。所以我想到了使用 IIS“启用预加载”功能。我读到它以防万一 - IIS 向网站发出虚假请求。

现在,我有两个困惑:

  1. 是的,当 IIS 重新启动时,我的应用程序在 global.ascx -protected void Application_Start() 中收到应用程序启动事件,但我没有 Request 对象(它为空)。我需要我的应用程序的基本 url 来处理某些东西,任何帮助我如何在没有请求对象的情况下拥有它
  2. 为什么 Request 对象为空?如果 IIs 发出虚假请求..

【问题讨论】:

    标签: asp.net-mvc iis-8


    【解决方案1】:

    是的,没错,Request 对象在那里不可用,因为它不是请求的一部分,它只是启动的应用程序,如果应用程序尚未启动并且检测到请求,则会自动触发。

    还有另一种方法,void Application_BeginRequest(Object sender, EventArgs e),这可能是您正在寻找的。这当然会在每个请求上运行,但我相信你可以为你想做的任何事情设置一些条件,只运行一次。

    请注意,那里也不是所有东西都可用,所以还有另一种方法,protected void Application_AcquireRequestState(),您也可以尝试一下。

    【讨论】:

    • Preaload ,不会引发 Begin 和 AcquireRequestState 事件 :(
    【解决方案2】:

    您可以尝试使用:

    System.Web.Hosting.HostingEnvironment.ApplicationHost.GetSiteName();
    

    与请求无关。

    【讨论】:

    • 我试过了——但它说——“无法在 'System.Web.Hosting.IApplicationHost' 类型的实例上获取字段或调用方法,因为它是远程对象的代理”
    • 试试 'HttpRuntime.AppDomainAppVirtualPath'
    • 使用 -'HttpRuntime.AppDomainAppVirtualPath' 我可以找到虚拟路径。但我也需要 - Url.Scheme(http 或 https),因为在 prod 上它将是 https ..
    • 方案由请求决定,因此不起作用。听起来很奇怪,但您会让方案决定您在应用程序启动时所做的事情。也许在您的帖子中更详细地解释您想要实现的目标。
    • 我会设置项目配置,例如 Dev 和 Release。根据编译的配置,在 Application_Start 中做不同的事情。您可以在项目设置中为每个配置设置预处理器定义,例如可以使用“#if RELEASE”和“#if DEV”。
    猜你喜欢
    • 2011-09-10
    • 2018-04-27
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2015-08-17
    • 2023-03-26
    相关资源
    最近更新 更多