.net core编写转发服务
我有个小伙伴问我,他需要写一个转发服务的他有很多功能要通过他的服务转发~
技术栈又不一定asp.net core,我就想起泥水老前辈的BeetleX.FastHttpApi
中午午休,折腾了一会儿前辈,问清楚了FastHttpApi如何配置控制器依赖注入和控制器的路由配置
花了一些时间折腾,算折腾出来了
入口调用部分代码如下
- static void Main(string[] args)
- {
- UnitWork.Instance.Register((services) =>
- {
- services.AddScoped<Forward.Core.Forward>();
- services.AddSingleton<MaillService>();
- services.AddSingleton(typeof(IConfig), (serviceProvider)=>
- {
- var instance = new Config();
- instance.TryAdd<MaillService>("maill");
- return instance;
- });
- });
- UnitWork.Instance.Builder();
- var mApiServer = new HttpApiServer();
- mApiServer.ActionFactory.ControllerInstance += (o, e) =>
- {
- e.Controller = UnitWork.Instance.ServiceProvider.GetRequiredService(e.Type);
- };
- mApiServer.Register(Assembly.Load("Forward.Core"));
- mApiServer.Open();
- Console.ReadLine();
- }
- }
服务本体
- public class MaillService : IForwardService
- {
- private string userName = "2598145226@qq.com";
- private string pawssword = "********";
- private string _host = "smtp.qq.com";
- [ParamType(typeof(MaillModel))]
- public async Task<object> ExecuteAsync(object param)
- {
- MaillModel maillModel = param as MaillModel;
- using (SmtpClient smtpClient = new SmtpClient(_host, ))
- {
- smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式
- smtpClient.Host = _host;//指定SMTP服务器
- smtpClient.Credentials = new NetworkCredential(userName, pawssword);//用户名和密码
- smtpClient.EnableSsl = true;
- MailAddress fromAddress = new MailAddress(userName, "华灯");
- MailAddress toAddress = new MailAddress(maillModel.ToMail);
- MailMessage mailMessage = new MailMessage(fromAddress, toAddress);
- mailMessage.Subject = maillModel.Subject;//主题
- mailMessage.SubjectEncoding = Encoding.UTF8;
- mailMessage.Body = maillModel.Body;//内容
- mailMessage.BodyEncoding = Encoding.UTF8;//正文编码
- mailMessage.IsBodyHtml = true;//设置为HTML格式
- mailMessage.Priority = MailPriority.Normal;//优先级
- await smtpClient.SendMailAsync(mailMessage);
- }
- return true;
- }
- }
- internal class MaillModel
- {
- public string ToMail { get; set; }
- public string Subject { get; set; }
- public string Body { get; set; }
- }
转发服务部分
- [Controller(BaseUrl = "/Forward", SingleInstance = false)]
- public class Forward
- {
- private IForwardFactory ForwardFactory { get; }
- public Forward(IForwardFactory forwardFactory)
- {
- ForwardFactory = forwardFactory;
- }
- [Post(Route = "{url}")]
- [NoDataConvert]
- public async Task<ResponseModel> Service(string url,IHttpContext context)
- {
- var result = new ResponseModel()
- {
- RequestTime = DateTime.Now
- };
- try
- {
- var json = context.Request.Stream.ReadString(context.Request.Length);
- result.Data = await ForwardFactory.ForwardAsync(url, json);
- result.ResponseTime = DateTime.Now;
- result.IsSuccessFul = true;
- }
- catch(Exception ex)
- {
- result.ResponseTime = DateTime.Now;
- result.Data = ex.ToString();
- }
- return result;
- }
- }
- [Controller(BaseUrl = "/Forward", SingleInstance = false)]
- public class Forward
- {
- private IForwardFactory ForwardFactory { get; }
- public Forward(IForwardFactory forwardFactory)
- {
- ForwardFactory = forwardFactory;
- }
- [Post(Route = "{url}")]
- [NoDataConvert]
- public async Task<ResponseModel> Service(string url,IHttpContext context)
- {
- var result = new ResponseModel()
- {
- RequestTime = DateTime.Now
- };
- try
- {
- var json = context.Request.Stream.ReadString(context.Request.Length);
- result.Data = await ForwardFactory.ForwardAsync(url, json);
- result.ResponseTime = DateTime.Now;
- result.IsSuccessFul = true;
- }
- catch(Exception ex)
- {
- result.ResponseTime = DateTime.Now;
- result.Data = ex.ToString();
- }
- return result;
- }
- }
他只需要在入口地方注入服务即可
调用一个发送邮件的服务
项目在
https://github.com/htrlq/ForwardService
.net core编写转发服务的更多相关文章
- .net core编写转发服务(二) 添加服务发布订阅
源设计就单纯完成了把服务转发到特定的服务模块,一定程度上解耦了业务流程 但是我们实际开发过程中会面临服务转发后还有一些列关联的服务 举个例子 你调用了发送邮件的服务,接下来会面临扣费的服务,扣费之后会 ...
- .net core编写转发服务(三) 接入Polly
在web服务里面,很常见出现各种问题,需要一些响应的策略,比如服务繁忙的时候,重试,或者重试等待 服务繁忙的时候根据策略即使处理 关于接入Polly我还是沿用之前的代码,继续迭代 Web Api用的是 ...
- .Net Core with 微服务 - Ocelot 网关
上一次我们通过一张架构图(.Net Core with 微服务 - 架构图)来讲述了微服务的结构,分层等内容.从现在开始我们开始慢慢搭建一个最简单的微服务架构.这次我们先用几个简单的 web api ...
- .Net Core with 微服务 - Consul 注册中心
上一次我们介绍了 Ocelot 网关的基本用法.这次我们开始介绍服务注册发现组件 Consul 的简单使用方法. 服务注册发现 首先先让我们回顾下服务注册发现的概念. 在实施微服务之后,我们的调用都变 ...
- 使用AWS亚马逊云搭建Gmail转发服务(三)
title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ...
- 使用AWS亚马逊云搭建Gmail转发服务(二)
title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...
- 使用AWS亚马逊云搭建Gmail转发服务(一)
title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...
- C#码农的大数据之路 - 使用Ambari自动化安装HDP2.6(基于Ubuntu16.04)并运行.NET Core编写的MR作业
准备主机 准备3台主机,名称作用如下: 昵称 Fully Qualified Domain Name IP 作用 Ubuntu-Parrot head1.parrot 192.168.9.126 Am ...
- 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)
背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...
随机推荐
- kafka的认识、安装与配置
认识Kafka 花费越少的精力在数据移动上,就能越专注于核心业务 --- <Kafka:The Definitive Guide> 认识 Kafka 之前,先了解一下发布与订阅消息系统:消 ...
- for循环与嵌套(水仙花数与三角形的打印)
## 一.for循环语法:for(开始区间: 结束区间; 修改循环条件){ 循环体:} > 开始区间:初始化表达式(确定开始)int i = 1; > 结束区间:逻辑表达式(确定结束) i ...
- classpath路径(转)
src不是classpath, WEB-INF/classes,lib才是classpathWEB-INF/ 是资源目录, 客户端不能直接访问, 这话是没错,不过现在的IDE编译器在编译时会把src下 ...
- python处理json总结
一.首先,了解下什么是JSON? JSON:JavaScript Object Notation [JavaScript 对象表示法] JSON 是一种轻量级的数据交换格式,完全独立于任何程序语言的文 ...
- JavaScript 基础 学习 (二)
JavaScript 基础 学习 节点属性 每一个节点都有自己的特点 这个节点属性就记录着属于自己节点的特点 1. nodeType(以一个数字来表示这个节点类型) 语法:节点.nodeT ...
- C、C++、Java到Python,编程入门学习什么语言好?
摘要:回顾编程语言几十年来的兴衰起伏,似乎也折射了整个信息产业的变迁消亡,想要在技术的洪流里激流勇进,找准并学精一两门编程语言更加显得至关重要. 最近,TIOBE更新了7月的编程语言榜单,常年霸榜的C ...
- 【五学x红小豆xRS】两边三地大联动-句型
<第五共和国> Tohara LY Sara'm, Sabang Chua Setuk KS Kareh Moh Induree Junchi Chueh? 阁下!和这样的虫豸在一起,怎么 ...
- 【Python学习笔记五】re.findall()方法中,正则的"()"效果
在笔记四中,使用正则去筛选数据时,使用了findall()这个方法,在使用时正则表达式中使用了到了"()",最初以为只是强调执行优先级,后来发现正则表达式中的每一个(),在find ...
- node.js day01学习笔记:认识node.js
Node.js(JavaScript,everywhere) 1.Node.js 介绍 1.1. 为什么要学习Node.js 企业需求 + 具有服务端开发经验更好 + front-end + back ...
- 由一个计数器出发:关于vue使用独立js文件的问题
最近有个vue项目要用ztree. 然后,我想把一些逻辑提出来作为公共的方法,放到独立的js文件里. ztreeTool.js import $ from 'jquery' export defaul ...