我必须在哪里检索应用程序的基本Uri /根路径?

时间:2015-12-08 13:41:07

标签: asp.net asp.net-mvc

如果我的ASP.NET MVC应用程序部署在网址http://www.foobar.com/app,那么我希望能够获得此根网址。

我想在某个地方这样做:

var scheme = HttpContext.Current.Request.Url.Scheme;
var host = HttpContext.Current.Request.Url.Host;
var port = HttpContext.Current.Request.Url.IsDefaultPort 
           ? 
           string.Empty : string.Format(":{0}", HttpContext.Current.Request.Url.Port);

var applicationRootUrl = 
          string.Format("{0}://{1}{2}", scheme, host, port);

选项A 如果我在Application_Start Global.asax中执行此操作,则HttpContext.Current.Request当时无效。

选项B 我可以在用户请求到达的某些情况下(BeginRequest,我想或者其他。不知道它的名字但可以查找它),并检查我是否已经有了基本路径然后我不要重建路径,否则我会构建应用程序的路径。

选项C 我可以为此编写HTTP模块或动作过滤器。

但是,选项B和C会稍微影响性能,因为它们会对每个请求执行此检查,即使它们只会在第一次请求时构建Url。

那么,我在哪里构建应用程序的基本URL?

PS:我使用的是ASP.NET MVC 5.2.3,目标是.NET框架的v4.6(因此也是ASP.NET的v4.6)。

1 个答案:

答案 0 :(得分:1)

您可以构建一次RootURI并将其存储在某处(应用程序变量,内存缓存,...),然后再重复使用。

例如:

public static GetRootUri()
{
  if (Application["RootUri"] == null)
  {
     var rootUri = ConstructRootUriHere();
     Application["RootUri"] = rootUri;
  }

   return Application["RootUri"] as string;
}

无论如何,我认为你不需要这样做,因为它根本不应影响性能,因此不值得。