无法向包含“。”的api路径添加参数。字符

时间:2016-11-06 21:21:12

标签: wso2 wso2-am

我正在使用WSO2 API Manager 2.0.0版。在API Publisher中,我使用in path参数为我的API添加了一个POST端点。

POST /person/{id}

一切正常。路径参数id将添加到端点。

但如果路径在某处包含.字符,则此方法无效。添加POST /cool.person/{id}将导致空参数列表。此外,无法手动将参数添加到此端点。

我做错了什么还是这个错误?

1 个答案:

答案 0 :(得分:1)

根据我的知识以及我对此的调查结果,POST /person/{id}POST /cool.person/{id}都是正确的。 我认为问题出在您的端点中,您的终点是不允许您通过POST方法添加其他条目 。 我按照你的路径,我无法重现你的情况,但我发现需要端点的许可才能在那里放入另一个条目。 我会附上 synaps文件响应快照

<?xml version="1.0" encoding="UTF-8"?>
<api xmlns="http://ws.apache.org/ns/synapse"
     name="admin--UrlTest"
     context="/paternType/1.0"
     version="1.0"
     version-type="context">
   <resource methods="POST" url-mapping="/persons.list" faultSequence="fault">
      <inSequence>
         <property name="api.ut.backendRequestTime"
                   expression="get-property('SYSTEM_TIME')"/>
         <filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
            <then>
               <send>
                  <endpoint name="admin--UrlTest_APIproductionEndpoint_0">
                     <http uri-template="http://jsonplaceholder.typicode.com/posts?"/>
                     <property name="ENDPOINT_ADDRESS"
                               value="http://jsonplaceholder.typicode.com/posts?"/>
                  </endpoint>
               </send>
            </then>
            <else>
               <send>
                  <endpoint name="admin--UrlTest_APIsandboxEndpoint_0">
                     <http uri-template="http://jsonplaceholder.typicode.com/posts?"/>
                     <property name="ENDPOINT_ADDRESS"
                               value="http://jsonplaceholder.typicode.com/posts?"/>
                  </endpoint>
               </send>
            </else>
         </filter>
      </inSequence>
      <outSequence>
         <class name="org.wso2.carbon.apimgt.usage.publisher.APIMgtResponseHandler"/>
         <send/>
      </outSequence>
   </resource>
   <resource methods="POST" url-mapping="/persons" faultSequence="fault">
      <inSequence>
         <property name="api.ut.backendRequestTime"
                   expression="get-property('SYSTEM_TIME')"/>
         <filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
            <then>
               <send>
                  <endpoint name="admin--UrlTest_APIproductionEndpoint_1">
                     <http uri-template="http://jsonplaceholder.typicode.com/posts?"/>
                     <property name="ENDPOINT_ADDRESS"
                               value="http://jsonplaceholder.typicode.com/posts?"/>
                  </endpoint>
               </send>
            </then>
            <else>
               <send>
                  <endpoint name="admin--UrlTest_APIsandboxEndpoint_1">
                     <http uri-template="http://jsonplaceholder.typicode.com/posts?"/>
                     <property name="ENDPOINT_ADDRESS"
                               value="http://jsonplaceholder.typicode.com/posts?"/>
                  </endpoint>
               </send>
            </else>
         </filter>
      </inSequence>
      <outSequence>
         <class name="org.wso2.carbon.apimgt.usage.publisher.APIMgtResponseHandler"/>
         <send/>
      </outSequence>
   </resource>
   <resource methods="GET" url-mapping="/personlist" faultSequence="fault">
      <inSequence>
         <property name="api.ut.backendRequestTime"
                   expression="get-property('SYSTEM_TIME')"/>
         <filter source="$ctx:AM_KEY_TYPE" regex="PRODUCTION">
            <then>
               <send>
                  <endpoint name="admin--UrlTest_APIproductionEndpoint_2">
                     <http uri-template="http://jsonplaceholder.typicode.com/posts?"/>
                     <property name="ENDPOINT_ADDRESS"
                               value="http://jsonplaceholder.typicode.com/posts?"/>
                  </endpoint>
               </send>
            </then>
            <else>
               <send>
                  <endpoint name="admin--UrlTest_APIsandboxEndpoint_2">
                     <http uri-template="http://jsonplaceholder.typicode.com/posts?"/>
                     <property name="ENDPOINT_ADDRESS"
                               value="http://jsonplaceholder.typicode.com/posts?"/>
                  </endpoint>
               </send>
            </else>
         </filter>
      </inSequence>
      <outSequence>
         <class name="org.wso2.carbon.apimgt.usage.publisher.APIMgtResponseHandler"/>
         <send/>
      </outSequence>
   </resource>
   <handlers>
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.common.APIMgtLatencyStatsHandler"/>
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.security.CORSRequestHandler">
         <property name="apiImplementationType" value="ENDPOINT"/>
      </handler>
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.security.APIAuthenticationHandler"/>
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.throttling.ThrottleHandler"/>
      <handler class="org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageHandler"/>
      <handler class="org.wso2.carbon.apimgt.usage.publisher.APIMgtGoogleAnalyticsTrackingHandler">
         <property name="configKey" value="gov:/apimgt/statistics/ga-config.xml"/>
      </handler>
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.ext.APIManagerExtensionHandler"/>
   </handlers>
</api>

GET request and two POST requests

Firt POST request as <code>/persons</code>

Second POST request as <code>/persons.list</code>

Jeewana。