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

技术栈又不一定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

最新文章

  1. 用Python制作新浪微博爬虫
  2. Python Flask UnicodeDecodeError 编码错误解决
  3. C# log4net 不输出日志
  4. C头文件之&lt;stdio.h&gt;
  5. unity 播放过场动画
  6. 《QT Creator快速入门》
  7. 数据库连接池(DBCP:为数据统一建立一个缓冲池,现在企业开发使用)
  8. EXT--columnWidth
  9. Windows phone 之Socket
  10. Silverlight 模板(Template)使用
  11. 使用Map/MapWhen扩展方法
  12. 通过xib创建控制器
  13. Caused by: java.lang.ClassNotFoundException: javax.persistence.NamedStoredProcedureQuery
  14. 微信小程序中实现微信支付
  15. 使用ThreadLocal管理Mybatis中SqlSession对象
  16. Wpf ViewModel中 ObservableCollection不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改
  17. LeetCode算法题详解之两个数组的交集
  18. ES Route
  19. Codeforces35E(扫描线)
  20. Netty源码分析(前言, 概述及目录)

热门文章

  1. 07 . Jenkins忘记root密码
  2. day24 常用模块(下)
  3. class文件的基本结构及proxy源码分析二
  4. Windows配置Delve的测试环境
  5. JVM 专题十一:运行时数据区(六)方法区
  6. python面试题五:Python 编程
  7. YAPI工具配置LDAP统一用户认证
  8. md5加密密码
  9. springmvc 重定向到外网地址
  10. 第四章:View的工作原理