首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有.net或ActionContext的情况下如何在ActionContext核心中构建URL

在没有.net或ActionContext的情况下如何在ActionContext核心中构建URL
EN

Stack Overflow用户
提问于 2018-02-01 12:10:54
回答 1查看 1.5K关注 0票数 6

我正在实现电子邮件发送模块,需要构建URL。我的目的是使用IUrlHelper,但是由于它需要提供大量的依赖关系,所以我真的很难构建这个对象。

此时此刻,我正处于这一步:

代码语言:javascript
复制
ActionContext actionCtx = new ActionContext(new DefaultHttpContext(), new RouteData(), new ActionDescriptor());
_urlHelper = new UrlHelper(actionCtx);

但是,通过这种方式构建的urlHelper在尝试构建URL时仍然会失败,只有一个例外。

例外是:

指数超出了范围。必须是非负的,并且小于集合的大小。参数名称: System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument参数处的索引,System.Collections.Generic.List`1.get_Item(Int32索引处的ExceptionResource资源)在Microsoft.AspNetCore.Mvc.Routing.UrlHelper.get_Router()处

所以现在它可能需要创建和设置IRouter实例,但正如我所看到的,它再次需要设置大量的deps

那么,应该如何正确地做到这一点呢?

EN

回答 1

Stack Overflow用户

发布于 2018-02-01 13:47:28

正如您所看到的,在一个完全断开的库中实现这一点几乎是不可能的。更重要的是,您甚至需要路由来实现它的价值,这些路径将被清晰地限制在单独的web应用程序中,您的库必须有很强的依赖性才能访问。如果不是显而易见的话,那将是一个非常糟糕的设计选择。

我觉得你应该后退一步重新评估一下。如果您的目标是通过外部进程发送电子邮件,那么无论在那里安排任务(想必是您的web应用程序),都应该传递该邮件所需的信息,包括任何URL。这就把创建这些URL的责任从你的电子邮件库(它真的不应该承担这个责任--做一件事并做好)转移到一个可能已经具备必要能力的源上。

如果因为某种原因不能这样做的话。我想说的是,您的下一个最佳选择是在您要为之生成URL的web应用程序上设置一个或多个端点,并将这些URL返回您需要的URL和/或电子邮件库发送电子邮件所需的任何其他附加信息。这仍然外化了电子邮件发送功能,但为您的库提供了一种干净的方式,以便在需要时从web应用程序访问信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48562477

复制
相关文章

相似问题

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