Asp.net core 如何在ASP.NET Core中获取Web根路径和内容根路径?
我试图在视图中添加一个根路径作为参数,以便将其作为参数传递给PayPal按钮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
<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-useHostingEnvironment
及其所有属性。
例如,
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
。