MVC 6 IUrlHelperdependency injection
我想通过dependency injection使用IUrlHelper,以便能够使用其function为不同的rest端点生成uris。 我似乎无法弄清楚如何从头开始创建UrlHelper,因为它在MVC 6中发生了变化,而MVC并没有自动在IoC控制器中提供该服务。
设置是我的控制器接受api模型转换器类的内部模型,并使用IUrlHelper(通过Depenedency Injection)。
如果有一个更好的替代IUrlHelper / UrlHelper,我可以用来为我的WebApi动作/控制器生成Uris,我愿意接受建议。
UrlHelper需要当前的操作上下文,我们可以从ActionContextAccessor获取它。 我正在使用这个:
services.AddScoped(); services.AddScoped(x => { var actionContext = x.GetService().ActionContext; return new UrlHelper(actionContext); });
现在,您可以将IUrlHelper直接注入到需要它的任何内容中,而无需跳过IHttpContextAccessor。
此方法现已过时。 请看下面的更新。
而不是services.AddTransient
或尝试直接注入IUrlHelper,您可以注入IHttpContextAccessor并从那里获取服务。
public ClassConstructor(IHttpContextAccessor contextAccessor) { this.urlHelper = contextAccessor.HttpContext.RequestServices.GetRequiredService(); }
除非它只是一个bug,否则使用UrlHelper添加IUrlHelper服务不起作用。
更新2017-08-28
以前的方法似乎不再起作用。 以下是一个新的解决方案。
将IActionContextAccessor配置为服务:
public void ConfigureServices(IServiceCollection services) { services .AddSingleton() .AddMvc(); }
然后注入IActionContextAccessor和IUrlHelperFactory然后生成IUrlHelper,如下所示
public class MainController : Controller { private IUrlHelperFactory urlHelperFactory { get; } private IActionContextAccessor accessor { get; } public MainController(IUrlHelperFactory urlHelper, IActionContextAccessor accessor) { this.urlHelperFactory = urlHelper; this.accessor = accessor; } [HttpGet] public IActionResult Index() { ActionContext context = this.accessor.ActionContext; IUrlHelper urlHelper = this.urlHelperFactory.GetUrlHelper(context); //Use urlHelper here return this.Ok(); } }
ASP.NET Core 2.0
安装
PM> Install-Package AspNetCore.IServiceCollection.AddIUrlHelper
使用
public void ConfigureServices(IServiceCollection services) { ... services.AddUrlHelper(); ... }
免责声明:此套餐的作者
- UseSqlServer方法缺少MVC 6
- HttpGet属性的路由名称asp.net core 2中基本通用控制器类的名称
- 在MVC 6中没有收到JsonResult的回复
- 如何在websocket请求期间validationJWT。 .net核心
- 从ASP.NET 5 Beta 4升级到Beta 5时出错
- ASP.NET vNext – MissingMethodException:找不到方法:Microsoft.CodeAnalysis.Diagnostic> EmitResult.get_Diagnostics()’
- 从类库访问Asp.net-core中的appsetting.json
- 如何关闭ASP.NET核心框架完成的日志记录
- asp.net 5中的Windows身份validation