如何在ASP.NET Core中获取Web根路径和内容根路径?

How do I get the Web Root Path and the Content Root Path in ASP.NET Core?

我试图在视图中添加根路径作为参数,所以我可以将它作为参数传递给PayPal按钮。

1
2
3
4
5
6
7
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
    ... snip ...

    <input type="hidden" name="return" value="@Model.UrlRoot/Manage/[email protected]">

    ... snip ...
</form>

我在筛选答案如何在ASP.NET MVC中获取webapp的基本URL?(20个答案)和ASP.NET MVC 6应用程序的虚拟应用程序根路径

由于ASP.NET核心非常不同,请求类不再包含.url属性,因此大多数答案都不起作用。


您可以这样将iHostingEnvironment注入控制器:

1
2
3
4
5
6
7
8
9
   public class HomeController : Controller
    {
        protected readonly IHostingEnvironment _hostingEnvironment;

        public HomeController(IHostingEnvironment hostingEnvironment)
        {

        }
    }

在viewimports.cshtml中添加:

1
2
@using Microsoft.AspNetCore.Hosting
@inject IHostingEnvironment HostingEnvironment

现在可以使用HostingEnvironment及其表单中的所有属性。例如HostingEnvironment.WebRootPathHostingEnvironment.ContentRootPath


使用.NET核心2.1,上下文将自动注入视图中。显示视图的请求的基本路径可以这样访问:

1
@(Context.Request.PathBase)


我遇到了马吕斯·舒尔茨的职位。(如果您是马吕斯,请添加您的答案,联系我,我将删除我的答案。)

https://blog.mariusschulz.com/2016/05/22/getting-the-web-root-path-and-the-content-root-path-in-asp-net-core

出于某种原因,我的控制器没有在构造函数中注入IHostingEnvironment,但它们具有请求对象。

在我的控制器里,我已经声明

1
var urlRoot = $"{Request.Scheme}://{Request.Host}{Url.Content("~")}";

并将其传递给MyViewModel

1
2
var model = new MyViewModel { UrlRoot = urlRoot };
return View(model);

这考虑到了HTTP与HTTPS、端口号,如果网站不是以/为根的话,希望还包括网站根。由于我的站点位于/I无法确认url.content("~")获取站点根目录。