2017-06-02 55 views
0

我有asp.net mvc应用程序。我正在使用以下代码来获取控制器内的基础URI。如何在应用程序启动时获取网站的基本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框架中注册作为应用单就这样我就可以把它注射在任何类后者

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

请参阅http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart/。 – RandomUs1r

回答

0

我不知道你正试图在这里完成的。在Application_Start()阶段,请求尚未构建,所以我认为您可以从当前请求获取URI的最早时间位于Aplication_BeginRequest()中,在此之前它是您的起始页面,可以在WebConfig文件中分配和使用。

相关问题