如何在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/21415.html

上一篇: How can I get my webapp's base URL in ASP.NET MVC?

下一篇: Replacing .NET WebBrowser control with a better browser, like Chrome?