Aynı tanımda birden fazla UriTemplates'e sahip olmanın basit bir yolu var mı? Örneğin, aynı şeyi çağırmak için/API/{id} ve/API/{id}/seçeneklerini istiyorum. Sonunda/olsun olmasın, onun önemli olmasını istemiyorum.UriTemplate WCF
cevap
Bunu yapmamın en kolay yolu, as explained here işlevini aşırı yüklemektir.
Çok basit değil, ancak aşağıdaki örnekte olduğu gibi, '/' karakterini kesmek için davranışınızda bir işlem seçici kullanabilirsiniz.
public class StackOverflow_6073581_751090
{
[ServiceContract]
public interface ITest
{
[WebGet(UriTemplate = "/API/{id}")]
string Get(string id);
}
public class Service : ITest
{
public string Get(string id)
{
return id;
}
}
public class MyBehavior : WebHttpBehavior
{
protected override WebHttpDispatchOperationSelector GetOperationSelector(ServiceEndpoint endpoint)
{
return new MySelector(endpoint);
}
class MySelector : WebHttpDispatchOperationSelector
{
public MySelector(ServiceEndpoint endpoint) : base(endpoint) { }
protected override string SelectOperation(ref Message message, out bool uriMatched)
{
string result = base.SelectOperation(ref message, out uriMatched);
if (!uriMatched)
{
string address = message.Headers.To.AbsoluteUri;
if (address.EndsWith("/"))
{
message.Headers.To = new Uri(address.Substring(0, address.Length - 1));
}
result = base.SelectOperation(ref message, out uriMatched);
}
return result;
}
}
}
public static void Test()
{
string baseAddress = "http://" + Environment.MachineName + ":8000/Service";
ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress));
host.AddServiceEndpoint(typeof(ITest), new WebHttpBinding(), "").Behaviors.Add(new MyBehavior());
host.Open();
Console.WriteLine("Host opened");
WebClient c = new WebClient();
Console.WriteLine(c.DownloadString(baseAddress + "/API/2"));
Console.WriteLine(c.DownloadString(baseAddress + "/API/2/"));
Console.Write("Press ENTER to close the host");
Console.ReadLine();
host.Close();
}
}
bunun gibi bir şey yapmak için zaten var: [WebGet (UriTemplate = "{id}, {id} /")] veya [WebGet (UriTemplate = "{id} || {id} /")] – Adam
Hayır, Her işlem açıklaması tek bir UriTemplate ile ilişkilidir. Birden fazla işlem (her biri kendi şablonuna sahip) olabilir ve bunlardan birinde sadece diğerini çağırırsınız. – carlosfigueira
yea - Sadece bir şekilde bundan kaçınmayı umuyordum ... hmm – Adam
Bu sadece kısmen yararlı olmakla birlikte, yeni WCF Web API kütüphane HttpBehavior Yoksay veya yönlendir ayarlanabilir TrailingSlashMode denilen bir özellik vardır.
- 1. Bu WCF hizmeti neden UriTemplate parametresini tanımıyor?
- 2. WCF Web API Birden Çok Yöntemde Bulunan UriTemplate Öğeleri
- 3. UriTemplate kullanarak dize olmayan WCF RESTful hizmetine iletebilir miyim?
- 4. WCF ResponseFormat WebGet
- 5. WCF REST: wcf yöntem yanıtı için "ArrayOf" önekini kaldır
- 6. WCF hizmet yönteminde JSON tüketim
- 7. WCF Yapılandırma AdresiFilter uyuşmazlığı
- 8. WCF Karmaşık türlerini içeren dinlenme parametreleri
- 9. WCF hizmeti doğru JSON
- 10. WCF/WCF Veri Hizmetleri/WCF RIA Hizmetleri
- 11. WCF: ServiceHost (WCF 4.5)
- 12. WCF
- 13. WCF
- 14. WCF
- 15. WCF
- 16. WCF
- 17. WCF REST POSTASI JSON: Parametre boş
- 18. WCF Ayrı Kurulumda WCF Servisi
- 19. WCF REST Hizmet - 401 Yetkisiz
- 20. WCF REST Hizmeti'nde JSON olmayan, XML dışı veriler döndürme
- 21. WCF servis sözleşmesi null bir giriş parametresine sahip olabilir mi?
- 22. WCF Restless hizmeti oluşturma, eşzamanlılık sorunları
- 23. üzerinde çalışıyorum bir WCF hizmeti WCF uygulamasında
- 24. WCF IBM Websphere MQ İletişimi (WCF Dinleyicisi)
- 25. Neden WCF REST POST yönteminde iki bağımsız değişken kullanamıyorum?
- 26. dönen veri kümeleri REST/WCF hizmeti
- 27. WCF REST
- 28. WCF Uri
- 29. WCF IDataContractSurrogate
- 30. DateTime.Kind WCF
Bunu mu demek istediniz:/API/{id} ve/API {id}/'veya'/API/{id} ve/API/{id}/'? – Nate
ops yea ... düzeltecek .. teşekkürler! – Adam