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

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


当前回答

也许这是一个更好的解决方案。

@{
   var baseUrl = @Request.Host("/");
}

使用

<a href="@baseUrl" class="link">Base URL</a>

其他回答

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

 <base href="~/" />

对于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);

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

System.Web.HttpRuntime.AppDomainAppVirtualPath

在MVC _Layout.cshtml中:

<base href="@Request.GetBaseUrl()" />

我们就是这么用的!

public static class ExtensionMethods
{
public static string GetBaseUrl(this HttpRequestBase request)
        {
          if (request.Url == (Uri) null)
            return string.Empty;
          else
            return request.Url.Scheme + "://" + request.Url.Authority + VirtualPathUtility.ToAbsolute("~/");
        }
}

这是我的解决方案(使用。net core 3.1,在api控制器中):

string baseUrl = $"{Request.Scheme}://{Request.Headers.Where(h => h.Key == "Host").First().Value}";