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

技术栈又不一定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, 587))            {                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

原文地址:https://www.cnblogs.com/NCoreCoder/p/10839847.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

.net core编写转发服务相关推荐

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

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

  2. 打造 .NET Core 链接转发服务

    我最近使用 .NET Core 2.2 造了个名为"Link Forwarder" (链接转发器)的 URL 转发服务,并已开源.目前预览版已部署到我的子域"go.edi ...

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

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

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

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

  5. .NET CORE编写控制台程序应有的优雅姿势(转载)

    原文地址:https://www.cnblogs.com/zuowj/p/11107243.html 本文所说的编写控制台程序应有的"正确"方法,我把正确二字加上引号,因为没有绝对 ...

  6. .Net Core with 微服务 - Polly 服务降级熔断

    在我们实施微服务之后,服务间的调用变的异常频繁.多个服务之间可能是互相依赖的关系.某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败.某一个服务调用失败轻 ...

  7. .NET Core with 微服务 - Consul 配置中心

    上一次我们介绍了Elastic APM组件.这一次我们继续介绍微服务相关组件配置中心的使用方法.本来打算介绍下携程开源的重型配置中心框架 apollo 但是体系实在是太过于庞大,还是让我爱不起来.因为 ...

  8. .Net Core with 微服务 - Seq 日志聚合

    上一次我们介绍并演示了如果使用 Consul 做为我们微服务的注册中心,来实现服务的注册与发现.那么本次我们讲会演示如何做日志聚合.日志聚合比较常用的有 ELK 等,但是这次我想要介绍的是一款比较小众 ...

  9. 使用.NET Core创建Windows服务 - 使用.NET Core工作器方式

    原文:Creating Windows Services In .NET Core – Part 3 – The ".NET Core Worker" Way 作者:Dotnet ...

最新文章

  1. P4报名截止|引爆1.1万亿基因测序市场,精准医学50+殿堂级专家议程大曝光
  2. Python_第一堂课
  3. 中国厂商加速5G前瞻性部署
  4. kotlin 中 lambda 表达式的 return 行为
  5. 洛谷 P1352 没有上司的舞会(树形 DP)
  6. Linux下访问window挂载的磁盘
  7. STM32 HAL 硬件IIC+DMA+简单图形库控制OLED
  8. d3.js html显示图片,d3.js v4:如何在鼠标点击节点后显示图像
  9. 作者:王亚楠(1988-),男,中国科学院昆明植物研究所科学数据库管理员
  10. 阿里云ECS服务器部署HADOOP集群(三):ZooKeeper 完全分布式集群搭建
  11. java实现关键词云_Java synchronized 关键字的实现原理
  12. Python字符串与列表间的相互转化
  13. 走迷宫问题 算法竞赛入门经典
  14. 蓝桥杯 ADV-189 算法提高 连接乘积
  15. SQL:postgresql查询、删除名字中包含某些字段的视图
  16. kubernetes视频教程笔记 (36)-部署 prometheus granfana
  17. 复制高亮代码到印象笔记
  18. 通达OA2019版本全功能
  19. dota英雄技能快捷键大全
  20. C语言输入Aa1Bb2Cc3,C语言shuzu_test.doc

热门文章

  1. chrome 悬停大图插件_Google Chrome浏览器的悬停卡:我不想要的我最喜欢的新东西
  2. vue-router query,parmas,meta传参
  3. django rest framework 过滤 lim分页
  4. chrome开启touch屏幕点击事件
  5. 【leetcode】75. Sort Colors
  6. 基于centos7系统mongodb3.,4.4安装
  7. phpstrom 编辑器设置
  8. Linux服务器数据备份
  9. zookeeper集群部署监控与选举同步流程等工作原理
  10. 51CTO博客 NO.1 大奖赛之后感想---奖品