我目前正在尝试做一些在ASP.NET 4中非常简单和直接的事情,但是这并不是ASP.NET 5中的情况。
在使用UrlHelper之前,它非常简单:
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);然而,在我的一生中,我无法思考如何使用新的UrlHelper。我在看测试用例,要么我完全疯了,要么我漏掉了什么东西,我似乎弄不明白。如果能帮上忙的话那就太好了。
发布于 2015-06-07 19:40:01
更新-邮政RC2
正如@deebo所提到的,您不再能够直接从DI获得IUrlHelper。相反,您需要将IUrlHelperFactory和IActionContextAccessor注入到类中,并使用它们获取IUrlHelper实例,如下所示:
public MyClass(IUrlHelperFactory urlHelperFactory, IActionContextAccessor actionAccessor)
{
this.urlHelperFactory = urlHelperFactory;
this.actionAccessor = actionAccessor;
}
public void SomeMethod()
{
var urlHelper = this.urlHelperFactory.GetUrlHelper(this.actionAccessor.ActionContext);
}您还需要在启动类中注册(默认情况下IUrlHelperFactory已经注册):
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();请记住,只要您获得actionContext的代码是在MVC/路由中间件之后运行的,这才能工作!(否则actionAccessor.ActionContext将为空)
我已经使用IUrlHelper中的IServiceProvider检索了HttpContext.RequestServices。
通常,您手头有一个HttpContext属性:
另一个选项是利用内置依赖项注入,例如,您的控制器可以有一个构造函数,如下所示,并且在运行时将提供一个IUrlHelper实例:
private IUrlHelper _urlHelper;
public HomeController(IUrlHelper urlHelper)
{
_urlHelper = urlHelper;
}发布于 2016-01-18 11:08:42
我想我会分享即将到来的RC2,因为目前的答案将不再起作用。
在RC 2中,您需要显式注册IActionContextAccessor和IUrlHelperFactory。
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddSingleton<IUrlHelperFactory, UrlHelperFactory>();然后使用DI/服务定位器:
public EmailTagHelper(IUrlHelperFactory urlHelperFactory, IActionContextAccessor actionContextAccessor)
{
_urlHelper = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext);
}我在这里写了关于TagHelpers:http://devonburriss.me/asp-net-5-tips-urlhelper的博客
发布于 2017-05-22 08:26:41
在Startup.cs中
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddSingleton<IUrlHelperFactory, UrlHelperFactory>();
services.AddScoped(it => it.GetService<IUrlHelperFactory>()
.GetUrlHelper(it.GetService<IActionContextAccessor>().ActionContext));交替
PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper 在Startup.cs中
services.AddUrlHelper();https://stackoverflow.com/questions/30696337
复制相似问题