当前位置:开发工具->.NET ->asp.net core中写入自定义中间件

原创版权标志asp.net core中写入自定义中间件

作者:阿郎  发表时间:2018/4/8 13:29:46  阅读:
[摘要] 如何在asp.net core中写入自定义的中间件?
使用支付宝扫码领红包,余额宝付款才可以使用红包哦!不要忘记哈。每天扫一次,天天赚红包!!可以将二维码保存到手机,每天直接扫码领红包啦!!
首先要明确什么是中间件?微软官方解释:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?tabs=aspnetcore2x
也就是中,我们需要在整个应用程序的请求管道中注入某一个中间层来做我们想做的事情。谈谈我的理解:
就拿asp.net 的管道模型来说,以往的.net请求管道中我们知道有21个(应该不止)事件来分别处理相应的模块,这是微软为我们设计好的,如果我们需要拓展出来什么,在相应的事件中写入注册就可以了。但是现在的软件设计模型逐渐的加入了一层---中间件,在整个的应用程序请求管道,我们不做任何的事件封装,而是开放出来,由程序猿自己在某个应用程序的某个部分写入自己需要注入的,而且可以注入多个,但是顺序什么的就是由自己定义了。
那么我们就需要基于IApplicationBuilder来构建我们的中间件。在哪个方法里面调用呢?那必须是Configure方法。根据微软官方的解释:Configure 方法用于指定如何响应HTTP 请求。在这里我们需要使用微软的UseMiddleware<T> 拓展方法来构建我们的中间件(每个Use扩展方法将中间件组件添加到请求管道)。我们将中间件封装在类中,并且通过扩展方法公开。封装如下:
public class RequestCultureMiddleware
 {
 private readonly RequestDelegate _next;

 public RequestCultureMiddleware(RequestDelegate next)
 {
 _next = next;
 }

 public Task InvokeAsync(HttpContext context)
 {
 var cultureQuery = context.Request.Query["culture"];
 if (!string.IsNullOrWhiteSpace(cultureQuery))
 {
 var culture = new CultureInfo(cultureQuery);

 CultureInfo.CurrentCulture = culture;
 CultureInfo.CurrentUICulture = culture;

 }

 // Call the next delegate/middleware in the pipeline
 return _next(context);
 }

 }
接着我们基于IApplicationBuilder接口拓展我们的中间件。通过UseMiddleware 来使用中间件。
public static class RequestCultureMiddlewareExtensions
 {
 public static IApplicationBuilder UseRquestCulture(this IApplicationBuilder builder)
 {
 return builder.UseMiddleware<RequestCultureMiddleware>();
 }
 }
最后我们在Configure中使用我们的中间件:
// 自定义中间件.
app.UseRquestCulture();
一般来讲,我们是在ConfigureServices 方法中注册服务,然后在Configure 方法中使用,但是
Configgure 方法可使用IApplicationBuilder实例来配置请求管道,不需要再服务容器重注册。当然我们也可以那么做,请参看: https://github.com/aspnet/Docs/tree/master/aspnetcore/fundamentals/startup/sample/

微信扫码关注公众号CPP技术网,微信号cpp_coder,关注我们的公众号,阅读更多精彩内容!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!每天还可以领取大红包哦!!!
文章来源:C++技术网原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。

返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)