如何在 ASP.NET Core 中获取 Web 根路径和内容根路径?
Posted
技术标签:
【中文标题】如何在 ASP.NET Core 中获取 Web 根路径和内容根路径?【英文标题】:How do I get the Web Root Path and the Content Root Path in ASP.NET Core? 【发布时间】:2018-08-22 17:11:18 【问题描述】:我正在尝试在视图中添加根路径作为参数,因此我可以将其作为参数传递给 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>
我正在筛选答案 How can I get my webapp's base URL in ASP.NET MVC? (20 个回答) 和 ASP.NET MVC 6 application's virtual application root path
由于 ASP.NET Core 完全不同,Request 类不再包含 .Url 属性,因此这些答案中的大多数都不起作用。
【问题讨论】:
【参考方案1】:您可以像这样将 IHostingEnvironment 注入到控制器中:
public class HomeController : Controller
protected readonly IHostingEnvironment _hostingEnvironment;
public HomeController(IHostingEnvironment hostingEnvironment)
在你的 _ViewImports.cshtml 添加:
@using Microsoft.AspNetCore.Hosting
@inject IHostingEnvironment HostingEnvironment
现在您可以在表单中使用 HostingEnvironment
及其所有属性。
例如HostingEnvironment.WebRootPath
或HostingEnvironment.ContentRootPath
【讨论】:
如果您只想在视图中使用它,则不必将 IHostingEnvironment 注入控制器。如果您希望它在任何视图中可用,则将 IHostingEnvironment 注入 _ViewImports 是有意义的。如果您只需要在单个视图中使用它,则可以将其直接注入到该视图中。 对于 asp.net core 3.1 及更高版本,使用IWebHostEnvironment
代替 IHostingEnvironment
。【参考方案2】:
我看到了 Marius Schulz 的帖子。 (如果你是 Marius,请添加你的答案,联系我,我会删除我的。)
https://blog.mariusschulz.com/2016/05/22/getting-the-web-root-path-and-the-content-root-path-in-asp-net-core
由于某种原因,我的控制器没有在构造函数中注入 IHostingEnvironment,但它们确实有 Request 对象。
在我的控制器中,我已经声明了
var urlRoot = $"Request.Scheme://Request.HostUrl.Content("~")";
并将其传递给 MyViewModel
var model = new MyViewModel UrlRoot = urlRoot ;
return View(model);
这会考虑到 http 与 https、端口号,如果网站不是以 / 为根,则希望是网站根。由于我的站点位于 / 我无法确认 Url.Content("~") 获取站点根目录。
【讨论】:
【参考方案3】:在 .NET core 2.1 中,上下文会自动注入到视图中。 显示视图的请求的基本路径可以这样访问:
@(Context.Request.PathBase)
【讨论】:
【参考方案4】:在 net core 5 razor 页面中,我在页面顶部添加了以下内容:
@inject IHostEnvironment hostEnvironment
然后在我的代码中,我成功地使用了以下代码:
string filePath = $@" hostEnvironment.ContentRootPath \wwwroot\assets\img\users\ user.ID .jpg";
if (System.IO.File.Exists(filePath))
imageURL = $" user.ID .jpg";
【讨论】:
以上是关于如何在 ASP.NET Core 中获取 Web 根路径和内容根路径?的主要内容,如果未能解决你的问题,请参考以下文章