1. MapSpaFallbackRoute 导致 swagger 无法使用
最近在业余时间用dotnet core 2.0开发一个开源项目,采用的是react+redux+webapi的方式,今天打算把swagger给引进来,结果发现在本地无法访问http://127.0.0.1/swagger, 调试了一下,最后发现是Startup的Configure方法配置有问题。
当使用dotnet创建项目的使用,dotnet默认会在Startup文件中的Configure方法添加一条这样的路由规则,为了让swagger跑起来,只要把这个路由规则删掉就可以了。
app.UseMvc(routes => { routes.MapSpaFallbackRoute( name: "spa-fallback", defaults: new { controller = "Home", action = "Index" }); });
或者还有另外一个方案就是把app.UserSwagger()放到MapSpaFallbackRoute的前面,这主要和Asp.Net Core中间件的使用加载顺序有关。
问题解决了,那么我们来看看MapSpaFallbackRoute到底是什么?为什么会有MapSpaFallbackRoute呢?
它的主要目的是让前端可以处理404的问题,当请求的request url都没有匹配到route,那么MapSpaFallbackRoute会把请求跳转到Home.Index, 交由前端来处理。
碰到的一个问题是,在处理/api的后端接口时,我们并不希望后端的接口也返回404,所以可以通过下面的代码过滤/api的后端API请求
app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api"), builder => { builder.UseMvc(routes => { routes.MapSpaFallbackRoute( name: "spa-fallback", defaults: new { controller = "Home", action = "Index" }); }); });