简体   繁体   English

无法使用上下文路径将请求转发到 URI

[英]Unable to forward Request to URI with context-path

I am unable to forward my request to a URI with contextpath.我无法将我的请求转发到具有上下文路径的 URI。

For example I am requesting my Spring cloud gateway server with例如,我正在请求我的 Spring 云网关服务器

http://localhost:1010/mygateway/server/date

And I expect it to forward to我希望它转发到

http://myapiserver.com/xyzapi/v1/server/date

But It gives me 404但它给了我 404

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
            .route("api-server-date", r -> r.host("**")
                    .and()
                    .path("/mygateway/server/date")
                    .filters(f -> f.stripPrefix(1))
                    .uri("https://myapiserver.com/xyzapi/v1"))
            .build();
}

It works when I change my configuration to this当我将配置更改为此时它有效

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
            .route("api-server-date", r -> r.host("**")
                    .and()
                    .path("/mygateway/xyzapi/v1/server/date")
                    .filters(f -> f.stripPrefix(1))
                    .uri("https://myapiserver.com"))
            .build();
}

I don't know what configuration I am providing wrong.我不知道我提供的配置是错误的。 It should work.它应该工作。

All I want is to use我想要的只是使用

https://myapiserver.com/xyzapi/v1

As my URI.作为我的 URI。 Meaning all Incoming traffic to my spring cloud gateway server should forward to this URL after appending the incoming url这意味着在附加传入 url 后,所有传入我的 spring 云网关服务器的流量都应转发到此 URL

Kindly suggest what is wrong ?请提出什么问题? Or is it something not possible with Spring Cloud Gateway ?或者 Spring Cloud Gateway 无法实现?

I think what you want (looking at online samples) is:我认为您想要的(查看在线示例)是:

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
  String requestHandlerUrl = "http://myapiserver.com/xyzapi/v1/server/date";
  return builder.routes()
          .route("api-server-date", r -> r.host("**")
             .and()
             .path("/mygateway/server/date")
             .filters(f -> f.stripPrefix(1))
             .uri(requestHandlerUrl)
          .build();
}

... so that requests made to whatever host your app is deployed on are forwarded/passed to requestHandlerUrl as the destination. ...以便对部署您的应用程序的任何主机发出的请求被转发/传递到requestHandlerUrl作为目标。

It looks as if /mygateway/server/date is the "shortcut" or alias for the URL you actually want to handle the request.看起来好像/mygateway/server/date是您实际要处理请求的 URL 的“快捷方式”或别名。

Some examples here: https://cloud.spring.io/spring-cloud-gateway/multi/multi__configuration.html#_fluent_java_routes_api这里的一些例子: https : //cloud.spring.io/spring-cloud-gateway/multi/multi__configuration.html#_fluent_java_routes_api

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM