.net core编写转发服务
生活随笔
收集整理的這篇文章主要介紹了
.net core编写转发服务
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
我有個小伙伴問我,他需要寫一個轉(zhuǎn)發(fā)服務(wù)的他有很多功能要通過他的服務(wù)轉(zhuǎn)發(fā)~
技術(shù)棧又不一定asp.net core,我就想起泥水老前輩的BeetleX.FastHttpApi
中午午休,折騰了一會兒前輩,問清楚了FastHttpApi如何配置控制器依賴注入和控制器的路由配置
花了一些時間折騰,算折騰出來了
入口調(diào)用部分代碼如下
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();
}
}
服務(wù)本體
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;//指定電子郵件發(fā)送方式
smtpClient.Host = _host;//指定SMTP服務(wù)器
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;//內(nèi)容
mailMessage.BodyEncoding = Encoding.UTF8;//正文編碼
mailMessage.IsBodyHtml = true;//設(shè)置為HTML格式
mailMessage.Priority = MailPriority.Normal;//優(yōu)先級
await smtpClient.SendMailAsync(mailMessage);
}
return true;
}
}
internal class MaillModel
{
public string ToMail { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
轉(zhuǎn)發(fā)服務(wù)部分
[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;
}
}
他只需要在入口地方注入服務(wù)即可
調(diào)用一個發(fā)送郵件的服務(wù)
項目在
https://github.com/htrlq/ForwardService
原文地址:https://www.cnblogs.com/NCoreCoder/p/10839847.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?
總結(jié)
以上是生活随笔為你收集整理的.net core编写转发服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .net core百万设备连接服务和硬件
- 下一篇: 分布式部署携程Apollo构建配置中心