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