如何在ASP.NET MVC中获取我的webapp的基本URL?
我如何快速确定我的ASP.NET MVC应用程序的根URL是什么? 也就是说,如果IIS设置为在http://example.com/foo/bar上为我的应用程序提供服务,那么我希望能够以可靠的方式获取该URL,而不涉及从当前URL请求并以某种脆弱的方式将其切碎,如果我重新布置我的动作,就会中断。
我需要基本URL的原因是,此Web应用程序调用另一个需要根用于调用者Web应用程序的回调用途。
假设你有一个Request对象可用,你可以使用:
string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
如果它不可用,你可以通过上下文获得它:
var request = HttpContext.Current.Request
所以这里列出的没有一个为我工作,但使用一些答案,我得到了一些工作:
public string GetBaseUrl()
{
var request = HttpContext.Current.Request;
var appUrl = HttpRuntime.AppDomainAppVirtualPath;
if (appUrl != "/")
appUrl = "/" + appUrl;
var baseUrl = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, appUrl);
return baseUrl;
}
ASP.NET Core / MVC 6更新:
ASP.NET Core
使这个过程更加痛苦,尤其是如果你深入你的代码。 您有2个选项可以访问HttpContext
1)从你的controller
:
var model = new MyClass(HttpContext);
然后在model
:
private HttpContext currentContext;
public MyClass(HttpContext currentContext)
{
this.currentContext = currentContext;
}
2)也许更简洁的方法是将其注入到您的课堂中,该课程从注册Startup:
的类型Startup:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddTransient<MyClass, MyClass>();
services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
然后让它像你这样注入:
private HttpContext currentContext;
public MyClass(IHttpContextAccessor httpContextAccessor)
{
currentContext = httpContextAccessor.HttpContext;
}
无论哪种情况,这里都是针对.NET Core
GetBaseUrl()
更新的:
public string GetBaseUrl()
{
var request = currentContext.Request;
var host = request.Host.ToUriComponent();
var pathBase = request.PathBase.ToUriComponent();
return $"{request.Scheme}://{host}{pathBase}";
}
在代码中:
Url.Content("~/");
MVC3剃刀语法:
@Url.Content("~/")
链接地址: http://www.djcxy.com/p/55695.html