可以在abp框架中检索应用程序服务中的主机地址吗?

时间:2017-08-27 07:37:18

标签: asp.net aspnetboilerplate

可以在应用服务中拥有主机地址吗?

例如,我们希望通过特定链接指向网站地址向客户发送电子邮件。这怎么可能?

2 个答案:

答案 0 :(得分:0)

  

HttpContext.Current.Request.Url

可以获取有关网址的所有信息。并且可以将网址分解成碎片。

答案 1 :(得分:0)

这是通过Google提出的,现有的答案并没有真正的帮助。我不一定同意应用服务是错误的领域;例如,在ABP中,服务与控制器紧密相连,并且通常仅存在服务以便为那里的Web请求提供服务。他们通常以需要登录用户的授权状态执行代码,因此整个事情都发生在HTTP请求/响应周期的隐式域上下文中。

因此-https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-context?view=aspnetcore-2.2#use-httpcontext-from-custom-components

  • services.AddHttpContextAccessor();添加到类似您的Startup.cs的位置-在您已经致电services.AddMvc()的任何地方之后。
  • 使用依赖项注入来获取服务中的IHttpContextAccessor-见下文。

使用基于构造函数的依赖关系注入,我们添加了一个私有实例变量来存储注入的对上下文访问器的引用以及提供引用的构造函数参数。下面的示例具有一个 just 构造函数,其中一个参数,但是在您的代码中可能已经有几个参数-只需添加另一个参数,然后在构造函数中设置_httpContextAccessor以及其他参数即可你已经在做。

using HttpContext          = Microsoft.AspNetCore.Http.HttpContext;
using IHttpContextAccessor = Microsoft.AspNetCore.Http.IHttpContextAccessor;

// ...

public class SomeService : ApplicationService
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public SomeService(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }
}

现在,服务代码可以读取HTTP上下文,并可以从那里读取HTTP请求的主机和端口之类的信息。

public async Task<string> SomeServiceMethod()
{
    HttpContext context = _httpContextAccessor.HttpContext;
    string      domain  = context.Request.Host.Host.ToLowerInvariant();
    int?        port    = context.Request.Host.Port;

    // ...
}