我自定义了一个验证是否登录的中间件TokenValidateMiddleware,
希望用它来确保以/api开头的webApi只有登录后才能访问,
(不限制的API我会以 unAuthApi/开头)
我在StartUp的Configurtion里配置
app.Map("/api", builder =>
{
builder.UseMiddleware<TokenValidateMiddleware>();
});
运行起来发现map后的中间件执行完后,不会执行之后的中间件(app.UserMvc()),
这样的话,即使验证通过了,没有后边的中间件,只返回404,
于是我在builder.UseMiddleware<TokenValidateMiddleware>();
后加了一行
builder.UseMvc();
,变成下图这样:
可是仍然没什么效果,我确保我写的中间件是没有问题的,因为我不用app.Map而是直接用
app.UseMiddleware<TokenValidateMiddleware>()的方式,可以得到正常的结果.
但是这样的话,UnAuthApi..开头的方法也走这个验证了,
而我只想对api...开头的方法加上登录验证,
请问大牛们是怎么处理的呢?
下图是我的中间件
可以用 .net core 授权验证 实现啊
我没有用过map,但我想 你只需要在 TokenValidateMiddleware 中判断下 URL就可以了,也不需要map。
然后,404 是因为
.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
}
你的mvc 没有放路由
@找点什么: 在中间件里判断的话,所有路径都会走该中间件,其实就失去了map的意义啦,
我试了下显示的配置了路由,也是404
@hexllo: 路由没有配对,
template: "{controller=Home}/{action=Index}/{id?}"); 这样写不对,