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

时间:2018-08-22 17:11:19

标签: 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.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属性,因此大多数答案都无效。

4 个答案:

答案 0 :(得分:2)

您可以像这样将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

答案 1 :(得分:1)

我碰到了马留斯·舒尔茨(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(“〜”)是否获得网站根目录。

答案 2 :(得分:1)

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

@(Context.Request.PathBase)

答案 3 :(得分:0)

在一个 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";
    }