ASP .网络核心2.0带初始参数的中间件问题及解决方法
问题
如何在ASP .网络核心2.0向中间件传入初始参数?
答案
在一个空项目中,创建一个普通旧清除(clear的缩写)对象来保存中间件所需的参数:
公共类在{ get设置;}公共字符串GreetTo { get设置;}}添加一个中间件:
公众的类greetingiddleware { private readonly request delegate _ next;私人只读问候语选项;公共问候iddleware(下一步请求委托,问候选项选项选项){ _ next=next_ options=options}公共异步任务调用(HttpContext上下文){ var message=$'Good {_options .问候{ _选项."{问候}";等待上下文回应。WriteAsync(消息);}}答案1:实例类型
添加一个扩展方法来配置中间件:
公共静态IApplicationBuilder usegreetingmiddleware(此IApplicationBuilder应用程序,问候选项选项){返回应用程序.UseMiddlewareGreetingMiddleware(选项);}使用中间件:
公共空配置(IApplicationBuilder应用程序,IHostingEnvironment env){ app .UseGreetingMiddleware(新的问候选项{问候于='早上好,问候于='塔希尔' });}答案2:函数类型
添加一个扩展方法来配置中间件:
公共静态IApplicationBuilder usegreetingmiddleware action(此IApplicationBuilder应用程序,action GreetingOptions options action){ var options=new GreetingOptions();optionsAction(选项);返回应用程序UseMiddlewareGreetingMiddleware(选项);}使用中间件:
公共空配置(IApplicationBuilder应用程序,IHostingEnvironment env){ app .usegreetingIddleWareAction(选项={ options .问候=早上好;选项. greet to=' Tahir });}上述两种方法结果一致。
运行,此时页面显示:
讨论
之前我们曾讨论过,在单独的类中定义中间件并使用扩展方法将其添加到请求管道中是最佳实践。我们也可能需要向中间件传入参数,通过对ASP .净核心源代码以及其他在线示例的学习,我总结出来上面两种模式。
上述的两种解决方法都非常直观。我们将参数封装到一个少类中,然后创建一个扩展方法来接受下面的参数:
1.少实例
2.需要调用的函数(在函数内设置POCO)
注:POCO实例通过构造函数传入中间件使用中间件()方法接收可变参数参数对象[],并将这些参数传入中间件构造函数。
配置服务
这些模式也能用于向服务容器中添加服务实例。为了便于说明,我们先添加一个服务:
公共接口IMessageService {字符串格式消息(字符串消息);}公共类message ServiCe : IMessageService { private readonly问候语选项_ options公共信息服务(问候选项选项){ _ options=options}公共字符串格式消息(字符串消息){返回$'Good {_options .问候{ _选项.问候}-{消息} ';}}添加如下任一个扩展方法来配置服务:
公共静态IServiceCollection AddMessageService(此为IServiceCollection服务,问候选项选项){退货服务.AddScopedIMessageService(工厂=新消息服务(选项));}公共静态IServiceCollection AddMessageServiceAction(此为IServiceCollection服务,action GreetingOptions options action){ var options=new GreetingOptions();optionsAction(选项);退货服务AddScopedIMessageService(工厂=新消息服务(选项));}在配置()中使用此服务:
public void ConfigureServices(IServiceCollection services){ services .AddMessageService(新的问候语选项{问候语在='早安',问候语到='塔希尔' });服务AddMessageServiceAction(选项={选项.问候=早上好;选项. greet to=' Tahir });}因为配置服务()先于配置()执行,因此我们可以直接在配置()注入此服务:
public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env,IMessageService msg){ app。run(async(context)={ wait context。响应。WriteAsync(消息。FormatMessage(由石三创作);});}运行,页面显示:
点击下载源代码:http://xiaozai . JB 51 . net/201710/马援/middlewarewithparameters.rar。
摘要
以上就是边肖介绍的ASP.NET Core 2.0中初始参数的中间件问题及其解决方案。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!
版权声明:ASP .网络核心2.0带初始参数的中间件问题及解决方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。