首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET核心DI将AddHttpContextAccessor的信息传递给服务

.NET核心DI将AddHttpContextAccessor的信息传递给服务
EN

Stack Overflow用户
提问于 2019-11-01 04:38:13
回答 1查看 43关注 0票数 0

在我的解决方案中,我有用于我的API的项目,我的Web应用程序,也有另一个项目,其中包括服务,这些项目正在从数据库中获取一些信息并对其进行格式化,这些项目目前仅供此API使用,但这些项目将来可能会被其他API项目使用。

我的API有几个控制器,它们从服务返回的结果中返回JSON数据。

在某些情况下,在调用对数据库的请求之前,服务需要调用API来处理一些信息。因为我的dev/staging/prod环境有自己的URL,所以我不想在服务中硬编码URL,我想使用DI来根据上下文动态地获取这些URL。

在我的API的Startup.cs中,我在ConfigureServices(IServiceCollection服务)部分添加了services.AddHttpContextAccessor();,以访问当前的http上下文:

代码语言:javascript
运行
复制
public void ConfigureServices(IServiceCollection services)
{
   ...
   services.AddHttpContextAccessor();
   ...
}

有了这个,我知道我现在可以直接访问我的控制器中的信息,我试过了,它起作用了:

代码语言:javascript
运行
复制
public class DataController : ControllerBase
{
    ...
    private readonly string _baseUrl;


    public FeaturesController(...
                                ,IHttpContextAccessor httpContextAccessor)
    {
        ...
        _baseUrl = UrlHelpers.ShowBaseURL(httpContextAccessor) ?? throw new ArgumentNullException(nameof(_baseUrl));
    }
}

public static class UrlHelpers
{
    public static string ShowBaseURL(IHttpContextAccessor httpcontextaccessor)
    {
        var request = httpcontextaccessor.HttpContext.Request;

        var absoluteUri = string.Concat(
            request.Scheme,
            "://",
            request.Host.ToUriComponent(),
            request.PathBase.ToUriComponent());
        return absoluteUri;
    }
}

我可以在服务中做同样的事情,但对我来说,它们不应该直接作用于httpcontext,因为这不是它们应该做的工作。我确信我可以通过添加某种注入的类来做得更好,这样就可以使特定的值对我的服务可用。

我知道当从我的控制器调用服务时,我也可以直接传递_baseUrl作为参数,但由于我试图更好地理解DI并使用它,所以我宁愿寻找另一种可行的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-06 04:39:45

我不能肯定,但我选择了Steven solution,这是最有意义的

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

https://stackoverflow.com/questions/58650863

复制
相关文章

相似问题

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