我有个小伙伴问我,他需要写一个转发服务的他有很多功能要通过他的服务转发~

技术栈又不一定asp.net core,我就想起泥水老前辈的BeetleX.FastHttpApi

中午午休,折腾了一会儿前辈,问清楚了FastHttpApi如何配置控制器依赖注入和控制器的路由配置

花了一些时间折腾,算折腾出来了

入口调用部分代码如下

  1. static void Main(string[] args)
  2. {
  3. UnitWork.Instance.Register((services) =>
  4. {
  5. services.AddScoped<Forward.Core.Forward>();
  6.  
  7. services.AddSingleton<MaillService>();
  8.  
  9. services.AddSingleton(typeof(IConfig), (serviceProvider)=>
  10. {
  11. var instance = new Config();
  12. instance.TryAdd<MaillService>("maill");
  13. return instance;
  14. });
  15. });
  16. UnitWork.Instance.Builder();
  17.  
  18. var mApiServer = new HttpApiServer();
  19. mApiServer.ActionFactory.ControllerInstance += (o, e) =>
  20. {
  21. e.Controller = UnitWork.Instance.ServiceProvider.GetRequiredService(e.Type);
  22. };
  23. mApiServer.Register(Assembly.Load("Forward.Core"));
  24. mApiServer.Open();
  25.  
  26. Console.ReadLine();
  27. }
  28. }

服务本体

  1. public class MaillService : IForwardService
  2. {
  3. private string userName = "2598145226@qq.com";
  4. private string pawssword = "********";
  5. private string _host = "smtp.qq.com";
  6.  
  7. [ParamType(typeof(MaillModel))]
  8. public async Task<object> ExecuteAsync(object param)
  9. {
  10. MaillModel maillModel = param as MaillModel;
  11.  
  12. using (SmtpClient smtpClient = new SmtpClient(_host, ))
  13. {
  14. smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
  15. smtpClient.Host = _host;//指定SMTP服务器
  16. smtpClient.Credentials = new NetworkCredential(userName, pawssword);//用户名和密码
  17. smtpClient.EnableSsl = true;
  18.  
  19. MailAddress fromAddress = new MailAddress(userName, "华灯");
  20. MailAddress toAddress = new MailAddress(maillModel.ToMail);
  21. MailMessage mailMessage = new MailMessage(fromAddress, toAddress);
  22.  
  23. mailMessage.Subject = maillModel.Subject;//主题
  24. mailMessage.SubjectEncoding = Encoding.UTF8;
  25. mailMessage.Body = maillModel.Body;//内容
  26. mailMessage.BodyEncoding = Encoding.UTF8;//正文编码
  27. mailMessage.IsBodyHtml = true;//设置为HTML格式
  28. mailMessage.Priority = MailPriority.Normal;//优先级
  29.  
  30. await smtpClient.SendMailAsync(mailMessage);
  31. }
  32.  
  33. return true;
  34. }
  35. }
  36.  
  37. internal class MaillModel
  38. {
  39. public string ToMail { get; set; }
  40. public string Subject { get; set; }
  41. public string Body { get; set; }
  42. }

转发服务部分

  1. [Controller(BaseUrl = "/Forward", SingleInstance = false)]
  2. public class Forward
  3. {
  4. private IForwardFactory ForwardFactory { get; }
  5.  
  6. public Forward(IForwardFactory forwardFactory)
  7. {
  8. ForwardFactory = forwardFactory;
  9. }
  10.  
  11. [Post(Route = "{url}")]
  12. [NoDataConvert]
  13. public async Task<ResponseModel> Service(string url,IHttpContext context)
  14. {
  15. var result = new ResponseModel()
  16. {
  17. RequestTime = DateTime.Now
  18. };
  19.  
  20. try
  21. {
  22. var json = context.Request.Stream.ReadString(context.Request.Length);
  23.  
  24. result.Data = await ForwardFactory.ForwardAsync(url, json);
  25. result.ResponseTime = DateTime.Now;
  26.  
  27. result.IsSuccessFul = true;
  28. }
  29. catch(Exception ex)
  30. {
  31. result.ResponseTime = DateTime.Now;
  32. result.Data = ex.ToString();
  33. }
  34.  
  35. return result;
  36. }
  37. }
  1. [Controller(BaseUrl = "/Forward", SingleInstance = false)]
  2. public class Forward
  3. {
  4. private IForwardFactory ForwardFactory { get; }
  5.  
  6. public Forward(IForwardFactory forwardFactory)
  7. {
  8. ForwardFactory = forwardFactory;
  9. }
  10.  
  11. [Post(Route = "{url}")]
  12. [NoDataConvert]
  13. public async Task<ResponseModel> Service(string url,IHttpContext context)
  14. {
  15. var result = new ResponseModel()
  16. {
  17. RequestTime = DateTime.Now
  18. };
  19.  
  20. try
  21. {
  22. var json = context.Request.Stream.ReadString(context.Request.Length);
  23.  
  24. result.Data = await ForwardFactory.ForwardAsync(url, json);
  25. result.ResponseTime = DateTime.Now;
  26.  
  27. result.IsSuccessFul = true;
  28. }
  29. catch(Exception ex)
  30. {
  31. result.ResponseTime = DateTime.Now;
  32. result.Data = ex.ToString();
  33. }
  34.  
  35. return result;
  36. }
  37. }

他只需要在入口地方注入服务即可

调用一个发送邮件的服务

项目在

https://github.com/htrlq/ForwardService

.net core编写转发服务的更多相关文章

  1. .net core编写转发服务(二) 添加服务发布订阅

    源设计就单纯完成了把服务转发到特定的服务模块,一定程度上解耦了业务流程 但是我们实际开发过程中会面临服务转发后还有一些列关联的服务 举个例子 你调用了发送邮件的服务,接下来会面临扣费的服务,扣费之后会 ...

  2. .net core编写转发服务(三) 接入Polly

    在web服务里面,很常见出现各种问题,需要一些响应的策略,比如服务繁忙的时候,重试,或者重试等待 服务繁忙的时候根据策略即使处理 关于接入Polly我还是沿用之前的代码,继续迭代 Web Api用的是 ...

  3. .Net Core with 微服务 - Ocelot 网关

    上一次我们通过一张架构图(.Net Core with 微服务 - 架构图)来讲述了微服务的结构,分层等内容.从现在开始我们开始慢慢搭建一个最简单的微服务架构.这次我们先用几个简单的 web api ...

  4. .Net Core with 微服务 - Consul 注册中心

    上一次我们介绍了 Ocelot 网关的基本用法.这次我们开始介绍服务注册发现组件 Consul 的简单使用方法. 服务注册发现 首先先让我们回顾下服务注册发现的概念. 在实施微服务之后,我们的调用都变 ...

  5. 使用AWS亚马逊云搭建Gmail转发服务(三)

    title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ...

  6. 使用AWS亚马逊云搭建Gmail转发服务(二)

    title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...

  7. 使用AWS亚马逊云搭建Gmail转发服务(一)

    title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...

  8. C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业

    准备主机 准备3台主机,名称作用如下: 昵称 Fully Qualified Domain Name IP 作用 Ubuntu-Parrot head1.parrot 192.168.9.126 Am ...

  9. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

随机推荐

  1. kafka的认识、安装与配置

    认识Kafka 花费越少的精力在数据移动上,就能越专注于核心业务 --- <Kafka:The Definitive Guide> 认识 Kafka 之前,先了解一下发布与订阅消息系统:消 ...

  2. for循环与嵌套(水仙花数与三角形的打印)

    ## 一.for循环语法:for(开始区间: 结束区间; 修改循环条件){ 循环体:} > 开始区间:初始化表达式(确定开始)int i = 1; > 结束区间:逻辑表达式(确定结束) i ...

  3. classpath路径(转)

    src不是classpath, WEB-INF/classes,lib才是classpathWEB-INF/ 是资源目录, 客户端不能直接访问, 这话是没错,不过现在的IDE编译器在编译时会把src下 ...

  4. python处理json总结

    一.首先,了解下什么是JSON? JSON:JavaScript Object Notation [JavaScript 对象表示法] JSON 是一种轻量级的数据交换格式,完全独立于任何程序语言的文 ...

  5. JavaScript 基础 学习 (二)

    JavaScript 基础 学习 节点属性 ​ 每一个节点都有自己的特点 ​ 这个节点属性就记录着属于自己节点的特点 1. nodeType(以一个数字来表示这个节点类型) ​ 语法:节点.nodeT ...

  6. C、C++、Java到Python,编程入门学习什么语言好?

    摘要:回顾编程语言几十年来的兴衰起伏,似乎也折射了整个信息产业的变迁消亡,想要在技术的洪流里激流勇进,找准并学精一两门编程语言更加显得至关重要. 最近,TIOBE更新了7月的编程语言榜单,常年霸榜的C ...

  7. 【五学x红小豆xRS】两边三地大联动-句型

    <第五共和国> Tohara LY Sara'm, Sabang Chua Setuk KS Kareh Moh Induree Junchi Chueh? 阁下!和这样的虫豸在一起,怎么 ...

  8. 【Python学习笔记五】re.findall()方法中,正则的"()"效果

    在笔记四中,使用正则去筛选数据时,使用了findall()这个方法,在使用时正则表达式中使用了到了"()",最初以为只是强调执行优先级,后来发现正则表达式中的每一个(),在find ...

  9. node.js day01学习笔记:认识node.js

    Node.js(JavaScript,everywhere) 1.Node.js 介绍 1.1. 为什么要学习Node.js 企业需求 + 具有服务端开发经验更好 + front-end + back ...

  10. 由一个计数器出发:关于vue使用独立js文件的问题

    最近有个vue项目要用ztree. 然后,我想把一些逻辑提出来作为公共的方法,放到独立的js文件里. ztreeTool.js import $ from 'jquery' export defaul ...