GREG_DORIANcod Ответов: 0

Uritemplate, который ожидает вызова параметра


Привет

У меня есть следующая ошибка создания и простой сервис с WCF REST (просто для упрощения кода я не создаю интерфейс)

[ServiceContract]
  public class Regiones
  {
      RegionesServiceEntities db = new RegionesServiceEntities();

      [OperationContract]
      [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/Ciudad/{NombreCiudad}")]
      public string Ciudades(int id)
      {
          var query = from t in db.Ciudad
                      where t.CiudadID == id
                      select new { t.NombreCiudad };
          var mObjeCiudad = query.SingleOrDefault();
          return mObjeCiudad.ToString();
      }

      [OperationContract]
      [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/Departamento/{NombreDepartamento}")]
      public string Departamento(int id)
      {
          var query = from t in db.Departamento
                      where t.DepartamentoID == id
                      select new { t.NombreDepartamento };
          var mObjDepto = query.SingleOrDefault();
          return mObjDepto.ToString();
      }

      [OperationContract]
      [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/Pais/{NombrePais}")]
      public string Paises(int id)
      {
          var query = from t in db.Pais
                      where t.PaisID == id
                      select new { t.NombrePais};
          var mObjPais = query.SingleOrDefault();
          return mObjPais.ToString();
      }
  }


и 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=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5.2" />
    <httpRuntime targetFramework="4.5.2" />
  </system.web>
  <system.serviceModel>
    
    <services>
      <service behaviorConfiguration="ServiceBehavior" name="coRegionesService.Regiones">
        <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding"

          bindingConfiguration="webHttpBindingWithJsonP" contract="coRegionesService.IRegiones" />
      </service>
    </services>
    
    <behaviors>
      
      <serviceBehaviors>

        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
        
      </serviceBehaviors>
      
      <endpointBehaviors>
        <behavior name="web">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    
    </behaviors>
    
    <protocolMapping>
      <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    
    <bindings>
      
      <webHttpBinding>
        <binding name="webHttpBindingWithJsonP" crossDomainScriptAccessEnabled="true" />
      </webHttpBinding>
    
    </bindings>
  </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>
  <connectionStrings>
    <add name="RegionesServiceEntities" connectionString="metadata=res://*/RegionesModel.csdl|res://*/RegionesModel.ssdl|res://*/RegionesModel.msl;provider=System.Data.SqlClient;provider connection string="data source=Express/database;initial catalog=RegionesService;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>


и ошибка, которая показывает мне это

Операция "города" контракта "регионы" имеет UriTemplate, который ожидает параметр с именем "NameCity", но в операции нет записи параметра с этим именем.

кто-нибудь поможет??

Что я уже пробовал:

[WebInvoke (Method = "GET", UriTemplate = " ciudades/{NombreCiudad}", ResponseFormat = WebMessageFormat.В Формате JSON, Кузов = WebMessageBodyStyle.Завернутый)]
общественного строка города(int идентификатор)
{
[OperationContract]
[WebInvoke (Method = "GET", UriTemplate = " departamento/{NombreDepartamento}", ResponseFormat = WebMessageFormat.В Формате JSON, Кузов = WebMessageBodyStyle.Завернутый)]
публичная строка Departamento(int id)
{

David_Wimbley

Вы пробовали изменение "/Сьюдад - /{NombreCiudad}" к "/Сьюдад - /{ИД}" в Ури шаблоны. Я считаю, что параметр шаблона URI ( текст внутри фигурных скобок) должен быть таким же, как и в сигнатуре вашего метода.

Поэтому, если у вас есть параметр string id, ваш шаблон URI должен ссылаться на {id}. Либо это, либо вам нужно изменить имя параметра в ваших методах, чтобы оно соответствовало тому, что находится в фигурных скобках. пример: шаблон ciudades/{NombreCiudad} должен иметь параметр, передаваемый в метод public string Ciudades(string NombreCiudad)

GREG_DORIANcod

да!! Я сделал это!! новая ошибка показывает, что концы, использующие 'UriTemplate', не могут быть использованы с ' System.Сервис-модель.Описание.WebScriptEnablingBehavior'.

David_Wimbley

Я думаю, что эта ссылка может быть полезна для новой ошибки.

http://kaushikghosh12.blogspot.com/2012/10/a-known-error-in-wcf-restful-service.html

0 Ответов