asp.net-core – 具有不同root的ASP.Net核心反向代理
我在代理ASP.NET Core MVC应用程序时遇到问题.
我的应用程序在本地主机上运行Kestrel:5000,我的Apache 2.4反向代理在localhost:80上运行.我想将来自localhost:80 / test的所有请求代理到localhost:5000 这是代理的httpd.conf部分: ... <Location "/test"> ProxyPass "http://localhost:5000" ProxyPassReverse "http://localhost:5000" </Location> ... 代理工作,但所有链接都被破坏.就像我有一个锚点链接到一个名为HomeController的控制器并执行操作About,从代理返回的链接是localhost / Home / About而不是localhost / test / Home / About.主机是正确的,它是缺少的上下文根测试. 处理这个问题的最佳做法是什么? ASP.NET Core中的配置是否指定了上下文根,以便TagHelpers将其考虑在内?或者它是Apache ProxyPass中重写链接的配置(真的不是这个的忠实粉丝)? 解决方法
问题是Web应用程序不知道子路径/测试,因此在您的情况下,它只会响应,就好像它是在根路径上直接调用一样.
ASP.NET Core有一个PathBase的概念来解决这个问题. 默认情况下,PathBase将为空,它取决于反向代理的配置,以说明如何设置PathBase. UsePathBaseMiddleware 内置的UsePathBaseMiddleware可用于为传入请求临时配置PathBase.这个中间件的工作方式基本上是它将检查请求是否以接受的路径前缀开始,如果是,则该前缀将从Path移动到PathBase中. 您可以使用 public void Configure(IApplicationBuilder app) { app.UsePathBase("/test"); // all the other middlewares app.UseStaticFiles(); app.UseMvc(); // … } 由于中间件只会在传入请求的路径中看到/ test前缀时调整PathBase,因此您需要确保反向代理实际上包含该前缀.因此,您必须调整Apache配置以包含该路径: <Location "/test"> ProxyPass "http://localhost:5000/test" ProxyPassReverse "http://localhost:5000/test" </Location> 请注意,UsePathBaseMiddleware不会阻止应用程序在没有该前缀的情况下工作.所以你可以在有和没有基本路径的情况下使用它,它将正确适应. 自定义中间件 如果您不想调整反向代理配置以在转发的请求中包含路径,那么您将无法使用UsePathBaseMiddleware.相反,您必须在那里添加自己非常简单的中间件: public void Configure(IApplicationBuilder app) { app.Use((context,next) => { context.Request.PathBase = "/test"; return next(); }); // all the other middlewares app.UseStaticFiles(); app.UseMvc(); // … } 这将设置/测试为传入请求的常量PathBase.因此,实际传入的请求不必包含它,这意味着您可以保留反向代理配置(而不是转发/ test路径).但是,这也意味着与UsePathBaseMiddleware不同,其中PathBase是根据传入请求动态设置的,现在对应用程序的所有请求都需要该路径,无论它们是否通过反向代理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .NET 4.5通用成员资格提供程序表名称
- 以编程方式为SqlDataSource设置ASP.NET参数不适用于回发
- asp.net省市三级联动的DropDownList+Ajax的三种框架(aspnet
- asp.net – .net 4.5 iis HighDensityWebHosting
- asp.net-mvc – 具有默认日期的MVC4日期选择器
- 从asp.net中的代码编写Html标记
- asp.net-mvc – ASP.NET DisplayFormat dd / MM / yyyy无效
- asp.net-mvc – 如何将IoC成员资格提供程序与ASP.NET MVC集
- asp.net – Microsoft.Web.Infrastructure.dll痛苦
- asp.net-core – 身份aspnet核心微服务
- 经典ASP错误’80020009’发生异常
- 为什么VS 2013将ASP.NET MVC 4 web.config复制到
- 不重新编译DLL,让FCKEditor支持附件上传
- asp.net-mvc – ASP.NET MVC Html.RadioButton异
- asp.net – WCF:如何将多个服务组合到单个WSDL中
- asp.net – 如何在Windows Phone中开发Google地图
- asp.net-mvc – 如何使用身份成员资格与现有数据
- WCF服务与ASP.NET Web Api
- asp.net-web-api – Web API / MVC 6中的安全JSO
- asp.net-mvc – HiddenFor(x => x.Id)正在由UrlP