如何快速确定我的ASP的根URL是什么?NET MVC应用程序?例如,如果IIS设置为在http://example.com/foo/bar上为我的应用程序服务,那么我希望能够以一种可靠的方式获得该URL,而不涉及从请求中获取当前URL,并以某种脆弱的方式将其分割,如果我重新路由我的操作,这种方式就会中断。

我需要基本URL的原因是这个web应用程序调用另一个需要根的调用者web应用程序的回调目的。


当前回答

下面的代码片段在MVC4中很好地为我工作,并且不需要可用的HttpContext:

System.Web.HttpRuntime.AppDomainAppVirtualPath

其他回答

这对我来说很好(也有负载均衡器):

@{
    var urlHelper = new UrlHelper(Html.ViewContext.RequestContext);
    var baseurl = urlHelper.Content(“~”);
}

<script>
    var base_url = "@baseurl";
</script>

特别是当您使用非标准端口号时,使用Request.Url.Authority一开始看起来是一个很好的引导,但在LB环境中失败了。

对于url的应用程序别名,如http://example.com/appAlias/…你可以试试这个:

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

下面的方法对我很有效

var request = HttpContext.Request;
                        var appUrl = System.Web.HttpRuntime.AppDomainAppVirtualPath;

                        if (appUrl != "/")
                            appUrl = "/" + appUrl + "/";

                        var newUrl = string.Format("{0}://{1}{2}{3}/{4}", request.Url.Scheme, request.UrlReferrer.Host, appUrl, "Controller", "Action");

我把它放在我的_Layout.cshtml的头部

 <base href="~/" />

也许这是对这里发布的答案的扩展或修改,但我简单地使用了下面这行,它是有效的:

Request.Url.GetLeftPart(UriPartial.Authority) + Url.Content("~")

当我的路径是:http://host/iis_foldername/controller/action 然后我收到:http://host/iis_foldername/