如何在应用程序启动时获取站点的基础uri?

时间:2017-06-02 21:02:17

标签: asp.net asp.net-mvc asp.net-mvc-4

我有asp.net mvc应用程序。我使用以下代码在控制器中获取基URI。

var baseApplicationUrl = string.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Authority);

这工作正常。

有没有办法在Application_Start()中构建baseuri?
在应用程序启动方法HttpContext.Current.Request将抛出异常

更新1
我有一个UISettings类,它包含一些链接。这些链接的基URI将根据应用程序的托管方式而有所不同。例如,它可以是http://www.example.com/home/indexhttps://www.example.com/home/indexhttp://www.example.com/subdomain/home/index。所以home/index有不同的基础uri取决于它的托管方式。

我了解申请开始时申请不可用。但是我想在应用程序启动时加载UISettings,这样我就可以在DI框架中注册为单例实例。

public class UISettings
{
   public string Link1 {get;set;}
   public string Link2 {get;set;}

   public static UiSettings Load()
   {
     // need to get baseURI here???

      var settings = new UISettings();
      settings.Link1 = baseURI + "/home/index";          
      return settings;
   }
}

然后在应用程序启动时将DI框架注册为singleton,这样我就可以在后面的任何类中注入它

  container.RegisterInstance<UISettings>(UiSettings.Load());

1 个答案:

答案 0 :(得分:0)

我不确定你要在这里完成什么。在Application_Start()阶段还没有构建Request,所以我认为从Current Request获取URI的最早时间是在Aplication_BeginRequest()中,之后它是你的起始页面,可以在WebConfig文件中分配和使用。