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

Asp.net core 如何在ASP.NET Core中获取Web根路径和内容根路径?,asp.net-core,Asp.net Core,我试图在视图中添加一个根路径作为参数,以便将其作为参数传递给PayPal按钮 <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top"> ... snip ... <input type="hidden" name="return" value="@Model.UrlRoot/Manage/Subscription?userId=@Model

我试图在视图中添加一个根路径作为参数,以便将其作为参数传递给PayPal按钮

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
    ... snip ...

    <input type="hidden" name="return" value="@Model.UrlRoot/Manage/Subscription?userId=@Model.User.Id">

    ... snip ...
</form>

... 剪
... 剪
我当时正在筛选答案 (20个答案) 和


由于ASP.NET核心与此完全不同,请求类不再包含.Url属性,因此大多数答案都不起作用

我偶然发现了马吕斯·舒尔茨的帖子。(如果你是马吕斯,请添加你的答案,与我联系,我将删除我的答案。)

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

在我的控制器中,我声明

var urlRoot = $"{Request.Scheme}://{Request.Host}{Url.Content("~")}";
并将其传递给MyViewModel

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

这将考虑http与https、端口号,如果网站的根不在/,还可能考虑站点根。由于我的站点位于/I,我无法确认Url.Content(~)是否获取站点根目录

您可以将IHostingEnvironment注入控制器,如下所示:

   public class HomeController : Controller
    {
        protected readonly IHostingEnvironment _hostingEnvironment;

        public HomeController(IHostingEnvironment hostingEnvironment)
        {

        }
    }
@(Context.Request.PathBase)
在_ViewImports.cshtml中添加:

@using Microsoft.AspNetCore.Hosting
@inject IHostingEnvironment HostingEnvironment
现在,您可以在表单中使用can-use
HostingEnvironment
及其所有属性。
例如,
HostingEnvironment.WebRootPath
HostingEnvironment.ContentRootPath

使用.NET core 2.1时,上下文会自动注入视图中。 显示视图的请求的基本路径可以如下访问:

   public class HomeController : Controller
    {
        protected readonly IHostingEnvironment _hostingEnvironment;

        public HomeController(IHostingEnvironment hostingEnvironment)
        {

        }
    }
@(Context.Request.PathBase)

如果只想在视图中使用IHostingEnvironment,则不必将IHostingEnvironment注入控制器。将iHostingEnvironment注入到_ViewImports中是有意义的,如果您希望它在任何视图中都可用的话。如果您只需要在单个视图中使用它,可以直接将其插入该视图。对于asp.net core 3.1及更高版本,请使用
IWebHostEnvironment
代替
IHostingEnvironment