【问题标题】:How do I get the Web Root Path and the Content Root Path in ASP.NET Core?如何在 ASP.NET Core 中获取 Web 根路径和内容根路径?
【发布时间】: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 属性,因此这些答案中的大多数都不起作用。

【问题讨论】:

    标签: asp.net-core


    【解决方案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.WebRootPathHostingEnvironment.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.Host}{Url.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";
            }
        

        【讨论】:

          猜你喜欢
          • 2021-10-30
          • 1970-01-01
          • 2017-01-09
          • 2023-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-16
          • 1970-01-01
          相关资源
          最近更新 更多