asp.net core 自定义中间件和service
首先新建项目看下main方法:
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build(); host.Run();
}
main方法
其中,UseStartup<Startup>()方法使用了Startup类,在Startup类,有ConfigureServices和Configure方法,调用顺序是先ConfigureServices后Configure。
下面生成自定义的Service:
public interface IMService
{
string GetString();
} public class MService:IMService
{
public string GetString()
{
return "这是我的服务";
}
}
可以在ConfigureServices中这样使用:
services.AddSingleton<IMService, MService>();
或者
services.AddScoped<IMService, MService>();
或者
services.AddTransient<IMService, MService>();
这三个方法的作用都一样,只是生成实例的方式不一样,Singleton是所有的service都用单一的实例,Scoped 是一个请求一个实例,Transient 每次使用都是新实例。
也可以使用依赖注入的方式添加服务
public static class MServiceExtensions
{
public static void AddMService(
this IServiceCollection services)
{
services.AddScoped<IMService,MService>();
}
}
这样就可以在ConfigureServices中这样用:services.AddMService();
下面自定义一个middleware
public class MMiddleware
{
private RequestDelegate nextMiddleware; public MMiddleware(RequestDelegate next)
{
this.nextMiddleware = next;
} public async Task Invoke(HttpContext context)
{
context.Items.Add("middlewareID",
"ID of your middleware");
await this.nextMiddleware.Invoke(context);
}
}
同样的,可以在Configure方法中这样使用:app.UseMiddleware<MMiddleware>();
也可以
public static class MyMiddlewareExtensions
{
public static IApplicationBuilder UseMMiddleware
(this IApplicationBuilder app)
{
return app.UseMiddleware<MMiddleware>();
}
}
就可以app.UseMMiddleware(); 在controller中可以
public IActionResult Index()
{
ViewBag.str= service.Getstring();
ViewBag.MiddlewareID = HttpContext.Items["middlewareID"];
return View();
}
asp.net core 自定义中间件和service的更多相关文章
- 如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容?
原文:如何在ASP.NET Core自定义中间件中读取Request.Body和Response.Body的内容? 文章名称: 如何在ASP.NET Core自定义中间件读取Request.Body和 ...
- asp.net core 自定义中间件【以dapper为例】
在asp.net core开发中.按照国际案例开始.都是先在Nuget安装XXX包.比如我们今天要用到的Dapper nuget里面安装Dapper 1.然后新建一个类文件DapperExtensio ...
- ASP.NET Core自定义中间件的方式
ASP.NET Core应用本质上,其实就是由若干个中间件构建成的请求处理管道.管道相当于一个故事的框架,而中间件就相当于故事中的某些情节.同一个故事框架采用不同的情节拼凑,最终会体现出不同风格的故事 ...
- asp.net core 自定义中间件
官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-2.1 中间件的定 ...
- asp.net core 自定义异常处理中间件
asp.net core 自定义异常处理中间件 Intro 在 asp.net core 中全局异常处理,有时候可能不能满足我们的需要,可能就需要自己自定义一个中间件处理了,最近遇到一个问题,有一些异 ...
- asp.net core mvc 中间件之WebpackDevMiddleware
asp.net core mvc 中间件之WebpackDevMiddleware WebpackDevMiddleware中间件主要用于开发SPA应用,启用Webpack,增强网页开发体验.好吧,你 ...
- asp.net core 自定义认证方式--请求头认证
asp.net core 自定义认证方式--请求头认证 Intro 最近开始真正的实践了一些网关的东西,最近写几篇文章分享一下我的实践以及遇到的问题. 本文主要介绍网关后面的服务如何进行认证. 解决思 ...
- asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密。
原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...
- ASP.NET Core:中间件
一.什么是中间件 我们都知道,任何的一个web框架都是把http请求封装成一个管道,每一次的请求都是经过管道的一系列操作,最终才会到达我们写的代码中.而中间件就是用于组成应用程序管道来处理请求和响应的 ...
随机推荐
- 《C++ Primer Plus》读书笔记之六—函数探幽
第八章 函数探幽 1.常规函数与内联函数的主要区别不在于编写方式,而在于C++编译器如何将它们组合到程序中. 2.常规函数调用使程序跳到另外一个地址(函数地址),并在函数结束时返回,更详细的的实现过程 ...
- 使用Ajax无刷新页面登录
<script> window.onload = function () { var myname = document.getElementById("uname") ...
- Session攻击
1.简介 Session对于Web应用无疑是最重要的,也是最复杂的.对于web应用程序来说,加强安全性的第一条原则就是 – 不要信任来自客户端的数据,一定要进行数据验证以及过滤,才能在程序中使用,进而 ...
- 洛谷 P2764 最小路径覆盖问题【最大流+拆点+路径输出】
题目链接:https://www.luogu.org/problemnew/show/P2764 题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V ...
- JNI学习笔记
JNI是什么->一套c和java的互掉规则 为什么使用JNI 1.非常多敏感效率的代码已经用C实现了 2. JNI双向.java调用c,c调用java Java集成本地代码问题 1.代码 ...
- linux用户相关及/etc/passed,/etc/group,/etc/shadow
useradd:新建用户 usermod:修改用户相关信息 userdel:删除用户分(-r选项) 组的操作与用户的操作类似 选项 userdel相关选项: -f:强制删除用户,即使用户已登录 -r: ...
- 【洛谷】【堆+结论】P4597 序列sequence
[题目背景:] 原题cf13c 数据加强版(就是说原来能用DP做现在不行了QwQ) [题目描述:] 给定一个序列,每次操作可以把某个数+1-1.要求把序列变成非降数列.而且要求修改后的数列只能出现修改 ...
- [USACO09JAN]Earthquake Damage
嘟嘟嘟 刚开始因为没看到只能走没有损坏的农场,磨叽了20多分钟……不管了,写题解吧. 首先如果一个点不能到达原点,那么和他相邻的点也不能到达原点,所以刚开始我们把不能走的点和他相邻的点都打上标记,然后 ...
- Day18 (一)类的加载器
一个运行时的Java虚拟机(JVM)负责运行一个Java程序. 当启动一个Java程序时,一个虚拟机实例诞生:当程序关闭退出,这个虚拟机实例也就随之消亡. 如果在同一台计算机上同时运行多个Java程序 ...
- 联通营业厅API 获取个人信息
string newValue = base.Request["tel"]; string newValue2 = base.Request["pwd"]; s ...