首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.NET内核中注入IUrlHelper

在ASP.NET内核中注入IUrlHelper
EN

Stack Overflow用户
提问于 2016-05-19 19:38:34
回答 6查看 22.3K关注 0票数 45

RC1中,IUrlHelper可以被注入到服务中(在启动类中使用services.AddMvc() )

这在RC2中不再起作用。有人知道如何在RC2中做到这一点吗?因为仅仅是新建一个UrlHelper就需要一个ActionContext对象。不知道如何在控制器之外获得它。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-05-19 19:49:30

.NET核心3+和.NET 5更新(2020及更高版本)

使用@Dmitry Pavlov的answer on this thread中详细介绍的LinkGenerator。它可以作为web框架的一部分注入,并与控制器中已经可用的HttpContext一起工作,或者通过注入IHttpContextAccessor在其他服务中访问。

对于ASP.NET核心RC2,有一个issue for this on the github repo。接受一个IUrlHelperFactory,而不是注入IUrlHelper。听起来您还需要注入IActionContextAccessor,因为Controller不再具有公共属性ActionContext

注册依赖项:

代码语言:javascript
复制
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();

然后依靠它:

代码语言:javascript
复制
public SomeService(IUrlHelperFactory urlHelperFactory,
                   IActionContextAccessor actionContextAccessor)
{
 
    var urlHelper =
        urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext);
}

然后按您认为合适的方式使用它。

票数 61
EN

Stack Overflow用户

发布于 2020-01-18 00:35:47

对于ASP.NET Core3.x应用程序,只需将IHttpContextAccessorLinkGenerator注入到您的控制器或服务。它们应该已经在DI中可用了。

代码语言:javascript
复制
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;

namespace Coding-Machine.NET
{
    public class MyService
    {
        private readonly IHttpContextAccessor _accessor;
        private readonly LinkGenerator _generator;

        public MyService(IHttpContextAccessor accessor, LinkGenerator generator)
        {
            _accessor = accessor;
            _generator = generator;
        }

        private string GenerateConfirmEmailLink()
        {
            var callbackLink = _generator.GetUriByPage(_accessor.HttpContext,
                page: "/Account/ConfirmEmail",
                handler: null, 
                values: new {area = "Identity", userId = 123, code = "ASDF1234"});

            return callbackLink;
        }
    }
}

如果您的应用程序无法解析IHttpContextAccessor,只需将其添加到DI即可

代码语言:javascript
复制
public void ConfigureServices(IServiceCollection services)
{
     services.AddHttpContextAccessor();
}
票数 52
EN

Stack Overflow用户

发布于 2018-03-02 14:27:54

适用于Net Core 2.0

将此添加到service.AddMvc()之后

代码语言:javascript
复制
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddScoped<IUrlHelper>(factory =>
{
    var actionContext = factory.GetService<IActionContextAccessor>()
                                   .ActionContext;
    return new UrlHelper(actionContext);
});
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37322076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档