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

技术栈又不一定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编写转发服务的更多相关文章

  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. 一篇文章教会你如何将DOM转换为virtual DOM

    [一.Virtual DOM简介] Virtual DOM是虚拟节点,它通过Javascript的Object对象模拟DOM中的节点,然后通过特定的render方法将其渲染成真实的DOM节点. 浏览器 ...

  2. 微信浏览器内 h5 直接唤醒 app 之 微信开放标签 wx-open-launch-app

    以前微信浏览器内想要直接唤醒 app 要么接微信的应用宝要么你是腾讯的干儿子. 而在微信在2020年5月分推出了“微信开放标签”功能 wx-open-launch-app 用于微信浏览器内直接唤醒 a ...

  3. JavaScript图形实例:阿基米德螺线

    1.阿基米德螺线 阿基米德螺线亦称“等速螺线”.当一点P沿动射线OP以等速率运动的同时,该射线又以等角速度绕点O旋转,点P的轨迹称为“阿基米德螺线”. 阿基米德螺线的笛卡尔坐标方程式为: r=10*( ...

  4. 用python批量处理Excel表格,处理结果又快又好,做办公室最靓的那个仔

    使用python批量处理Excel数据     让你根据Excel上所有人的身份证号码,提取出公司员工的生日 让你每个月都将公司所有人的考勤数据整理一下 类似这样的格式化的重复操作,你还在每次都使用的 ...

  5. 【高性能Mysql 】读书笔记(一)

    第1章 Mysql架构与历史 MYSQL最重要.最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理( Query Processing)及其他系统任务( Server Task)和数据的存储 ...

  6. Flutter 快捷开发 Mac Android Studio 篇

    老孟导读:此快捷方式适用于Mac下的 Android Studio .Windows 下的快捷方式请参考这篇文章:https://juejin.im/post/5efe71365188252e7d7f ...

  7. 面试京东T5,被按在地上摩擦,鬼知道我经历了什么?

    一转眼间,光阴飞快,各大企业都开始招人,各大学校也开始准备陆续入学. 金三银四已经快结束了,有的朋友发来喜报,面试上了一线大厂,也有没有面试上的朋友跑来跟我说,被虐惨了,几天给大家分享下我一个面试京东 ...

  8. 量子点/钙钛矿 LED的研究概述

    注:参考文献和文章尚在整理ing... 一 常用术语 1.外量子效率(External quantum efficiency,EQE) 这是LED最重要的参数,它的定义为: 因此,EQE越大,发射到外 ...

  9. Python Ethical Hacking - Bypass HTTPS(2)

    Injecting Code in HTTPS Pages: #!/usr/bin/env python import re from netfilterqueue import NetfilterQ ...

  10. Ant Design Pro 学习笔记:数据流向

    在讲这个问题之前,有一个问题应当讲一下: Ant Design Pro / umi / dva 是什么关系? 首先是 umi / dva 的关系. umi 是一个基于路由的 react 开发框架. d ...