我试图在视图中添加根路径作为参数,因此可以将其作为参数传递给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属性,因此大多数答案都无效。
答案 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.WebRootPath
或HostingEnvironment.ContentRootPath
答案 1 :(得分:1)
我碰到了马留斯·舒尔茨(Marius Schulz)的职位。 (如果您是Marius,请添加您的答案,与我联系,我将删除我的。)
由于某种原因,我的控制器没有在构造函数中注入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";
}