如何快速确定ASP.NET MVC应用程序的根URL?即,如果IIS设置为在http://example.com/foo/bar上提供我的应用程序,那么我希望能够以可靠的方式获取该URL,而不涉及从当前URL获取当前URL请求并以一些脆弱的方式将其砍掉,如果我重新路由我的行动就会中断.
我需要基本URL的原因是此Web应用程序调用另一个需要root用户来调用Web应用程序以进行回调.
我目前正在创建一个 Asp.NET Core 3.1 API 应用程序。在其中,我有一个launchSettings.json如下所示:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:61392",
"sslPort": 44308
}
},
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"launchUrl": "weatherforecast",
"environmentVariables": {
"Key": "Value",
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Application.API": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "weatherforecast",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "https://localhost:5001;http://localhost:5000"
}
}
}
Run Code Online (Sandbox Code Playgroud)
特别是,我对获取applicationUrl此文件中定义的值很感兴趣。不幸的是,除了通过 JSON 序列化直接加载文件并探测那里的值之外,我没有看到任何明显的方法来访问它们。
因此,我正在寻找更优雅的解决方案。有没有办法从Startup.Configure和/或Startup.ConfigureServices方法中访问这些值?
我在想类似的事情:
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true, …Run Code Online (Sandbox Code Playgroud) 以前,使用 .NET Core 2.2,我可以添加UseUrls到我的Program.cs文件中以设置 Web 服务器将在其上运行的 URL:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseUrls("http://localhost:5100");
Run Code Online (Sandbox Code Playgroud)
但是,在 .NET Core 3.1 中,Program.cs更改了默认格式:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
Run Code Online (Sandbox Code Playgroud)
我尝试UseUrls以与 .NET Core 2.2 相同的方式添加它,但它说:
“IHostBuilder”不包含“UseUrls”的定义,最佳扩展方法重载“HostingAbstractionsWebHostBuilderExtensions.UseUrls(IWebHostBuilder, params string[])”需要“IWebHostBuilder”类型的接收器
如何设置服务器的 URL 以使用 .NET Core 3.1(使用 .NET Core 3.1IHostBuilder代替IWebHostBuilder)?
我需要帮助来获取我的应用程序的主机/域名和端口。
到目前为止,这是我的Configure方法中的示例代码Startup.cs:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var url = ""; // something that will get the current host/domain and port of the running applicaiton.
RecurringJob.AddOrUpdate<ISomething>(i=>i.SomethingToExecute(url), Cron.Daily);
}
Run Code Online (Sandbox Code Playgroud)
因为我需要将url字符串传递给我的SomethingToExecute方法
public class Something : ISomething
{
public void SomethingToExecute(string url){
...
Debug.WriteLine(url)
}
}
Run Code Online (Sandbox Code Playgroud) 我最近刚刚从 ASP.NET MVC 切换到使用 .Core 2,但我不知道如何在 Core 中获取当前 URL。我可以使用以前的 asp.net 版本中的 Request 轻松获得它,但由于这在 .Net Core 中不再有效,我不知所措。
到目前为止,我无法从我的谷歌搜索中找到任何方法。
任何帮助表示赞赏。谢谢!