如何使用内部带有“点”的参数调用RESTFul Web服务

时间:2016-12-22 13:05:43

标签: web-services rest wcf url-encoding

我开发了一个RESTFul服务,但是当我想传递一个带有点的参数时,我遇到了问题。我尝试编码URL,用%2E替换点,但找不到终点。当我删除点时,会找到终点,因此很明显点有问题。

例如,此请求有效:

http://localhost:9999/SvcLipigas.svc/AlmacenaPedido/229188562/16122016/2030/123456/CILINDRO%2015%20KGCODIGAS/2/14000/15/19122016/1514/19122016/1000

但另一个不是:

http://localhost:9999/SvcLipigas.svc/AlmacenaPedido/229188562/16122016/2030/123456/CILINDRO%2015%20KG%2ECODIGAS/2/14000/15/19122016/1514/19122016/1000

请注意“CILINDRO%2015%20KG%2ECODIGAS”参数中的点。

任何帮助将不胜感激。

目前,作为补丁,我发送的是由管道字符替换的点,在服务中,我将其替换回点,但这是一个非常难看的解决方案。

编辑:

[OperationContract]
[WebInvoke(Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "AlmacenaPedido/{telefono}/{fechaPedido}/{horaPedido}/{codigoInterno}/{descripcionProducto}/{cantidadProducto}/{valorUnitario}/{kilosProducto}/{fechaEntrega}/{horaEntrega}/{fechaDespacho}/{horaDespacho}")]
int AlmacenaPedido(string telefono, string fechaPedido, string horaPedido, string codigoInterno, string descripcionProducto,
                   string cantidadProducto, string valorUnitario, string kilosProducto, string fechaEntrega, string horaEntrega,
                   string fechaDespacho, string horaDespacho);

编辑:这是完整的web.config文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="WS_PedidoCliente.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />
  </system.web>
  <system.serviceModel>
  <services>
    <service name="WS_PedidoCliente.SvcLipigas" behaviorConfiguration="serviceBehavior">
      <endpoint address=""
                binding="webHttpBinding"
                contract="WS_PedidoCliente.ISvcLipigas"
                bindingNamespace="http://ws.lipigas.cl"
                behaviorConfiguration="web"></endpoint>
          </service>
   </services>    
    <behaviors>
      <serviceBehaviors>
        <behavior name="serviceBehavior">
          <!-- To avoid disclosing metadata information, set the values below to false before deployment -->
          <serviceMetadata httpGetEnabled="true" />
          <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="web">
          <webHttp />
        </behavior>
      </endpointBehaviors>    
    </behaviors>
    <protocolMapping>
      <add scheme="http" binding="webHttpBinding"/>
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <!--
        To browse web app root directory during debugging, set the value below to true.
        Set to false before deployment to avoid disclosing web app folder information.
      -->
    <directoryBrowse enabled="true" />
  </system.webServer>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v12.0" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
  <connectionStrings>
    <add name="LipigasEntities" connectionString="metadata=res://*/Model.Lipigas.csdl|res://*/Model.Lipigas.ssdl|res://*/Model.Lipigas.msl;provider=Oracle.DataAccess.Client;provider connection string=&quot;DATA SOURCE=SLLCOSTO;PASSWORD=uni_1915sll;USER ID=PEDIDO&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <applicationSettings>
    <WS_PedidoCliente.Properties.Settings>
      <setting name="Usuario" serializeAs="String">
        <value>EMDITEC</value>
      </setting>
    </WS_PedidoCliente.Properties.Settings>
  </applicationSettings>
</configuration>

1 个答案:

答案 0 :(得分:1)

这是IIS的限制 它将点(编码与否)视为扩展。

尝试添加

<httpRuntime relaxedUrlToFileSystemMapping="true" />

到web.config