取消

net6之后不能通过替换HttpContext.Request.Path实现转发到其他路由

asp.net core 3.1的时候可以直接通过替换HttpContext.Request.Path实现转发到其他路由,此方式在更新到.net6后默认不再可行。


问题

asp.net core 3.1的时候可以直接通过替换HttpContext.Request.Path实现转发到其他路由,此方式在更新到.net6后默认不再可行。

解决

.ne6之后需要修改路由不能使用app.MapControllers()而应该使用app.UseRouting()和app.UseEndpoints(endpoints => endpoints.MapControllers())。

1
2
3
4
app.UseMiddleware<RequestPathCheckMiddleware>();
--app.MapControllers();
++app.UseRouting();
++app.UseEndpoints(endpoints => endpoints.MapControllers());

原因

调试发现不管怎么设置HttpContext.Endpoint都已经计算完成了,且是原来的路由,所以修改无效。而使用后面的写法则可以再次计算Endpoint。


参考资料

本文会经常更新,请阅读原文: https://dashenxian.github.io/post/net6%E4%B9%8B%E5%90%8E%E4%B8%8D%E8%83%BD%E9%80%9A%E8%BF%87%E6%9B%BF%E6%8D%A2HttpContext.Request.Path%E5%AE%9E%E7%8E%B0%E8%BD%AC%E5%8F%91%E5%88%B0%E5%85%B6%E4%BB%96%E8%B7%AF%E7%94%B1 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com)

登录 GitHub 账号进行评论