如何快速确定我的ASP的根URL是什么?NET MVC应用程序?例如,如果IIS设置为在http://example.com/foo/bar上为我的应用程序服务,那么我希望能够以一种可靠的方式获得该URL,而不涉及从请求中获取当前URL,并以某种脆弱的方式将其分割,如果我重新路由我的操作,这种方式就会中断。
我需要基本URL的原因是这个web应用程序调用另一个需要根的调用者web应用程序的回调目的。
如何快速确定我的ASP的根URL是什么?NET MVC应用程序?例如,如果IIS设置为在http://example.com/foo/bar上为我的应用程序服务,那么我希望能够以一种可靠的方式获得该URL,而不涉及从请求中获取当前URL,并以某种脆弱的方式将其分割,如果我重新路由我的操作,这种方式就会中断。
我需要基本URL的原因是这个web应用程序调用另一个需要根的调用者web应用程序的回调目的。
当前回答
对于MVC 4:
String.Format("{0}://{1}{2}", Url.Request.RequestUri.Scheme, Url.Request.RequestUri.Authority, ControllerContext.Configuration.VirtualPathRoot);
其他回答
下面的代码片段在MVC4中很好地为我工作,并且不需要可用的HttpContext:
System.Web.HttpRuntime.AppDomainAppVirtualPath
ASP。NET MVC 4有点不同:
string url = HttpContext.Request.Url.AbsoluteUri;
对于MVC 4:
String.Format("{0}://{1}{2}", Url.Request.RequestUri.Scheme, Url.Request.RequestUri.Authority, ControllerContext.Configuration.VirtualPathRoot);
将此函数添加到项目的静态类中,如实用程序类:
utility.cs内容:
public static class Utility
{
public static string GetBaseUrl()
{
var request = HttpContext.Current.Request;
var urlHelper = new UrlHelper(request.RequestContext);
var baseUrl = $"{request.Url.Scheme}://{request.Url.Authority}{urlHelper.Content("~")}";
return baseUrl;
}
}
在任何地方使用这段代码并享受它:
var baseUrl = Utility.GetBaseUrl();
你可以有一个静态方法来查看HttpContext。当前,并根据主机ID决定使用哪个URL(开发或活动服务器)。HttpContext甚至可能提供一些更简单的方法来做到这一点,但这是我找到的第一个选项,它工作得很好。