是否有一種簡單的方法可以在同一個定義中擁有多個UriTemplates。UriTemplate WCF
[WebGet(UriTemplate = "{id}")]
例如,我希望/ API/{id}和/ API/{id} /調用相同的東西。如果最後有/沒有,我不希望它重要。
是否有一種簡單的方法可以在同一個定義中擁有多個UriTemplates。UriTemplate WCF
[WebGet(UriTemplate = "{id}")]
例如,我希望/ API/{id}和/ API/{id} /調用相同的東西。如果最後有/沒有,我不希望它重要。
我發現要做到這一點的最簡單的方法是超載功能as explained here。
不是很簡單,但您可以在您的行爲中使用操作選擇器去除尾部的「/」,如下例所示。
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();
}
}
有沒有辦法這樣做: [WebGet(UriTemplate =「{id},{id} /」)]或[WebGet(UriTemplate =「{id} || {id} /」)] – Adam 2011-05-20 15:34:20
不,每個操作說明都與一個UriTemplate相關聯。你可以有多個操作(每個操作都有自己的模板),其中一個操作只需調用另一個操作。 – carlosfigueira 2011-05-20 15:46:09
是的 - 我只是希望避免,不知何故...嗯 – Adam 2011-05-20 15:49:34
這只是部分有幫助的,但新的WCF Web API庫有一個屬性上HttpBehavior稱爲可以設置爲忽略或重定向TrailingSlashMode。
您是指'/ API/{id}和/ API {id} /'或'/ API/{id}和/ API/{id} /'嗎? – Nate 2011-05-20 14:47:14
ops yea ...將改正..謝謝! – Adam 2011-05-20 15:21:07