首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UriTemplate WCF

UriTemplate WCF
EN

Stack Overflow用户
提问于 2011-05-20 22:44:01
回答 3查看 8.1K关注 0票数 5

有没有一种简单的方法可以让多个UriTemplates在同一个定义中。

代码语言:javascript
复制
 [WebGet(UriTemplate = "{id}")]

例如,我希望/API/{id}和/API/{id}/调用相同的东西。我不希望有/在结尾有没有关系。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-28 11:29:13

我找到的最简单的方法是重载函数as explained here

票数 1
EN

Stack Overflow用户

发布于 2011-05-20 23:30:48

不是很简单,但是你可以在你的行为中使用操作选择器来去掉尾随的'/',如下面的例子所示。

代码语言:javascript
复制
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();
    }
}
票数 4
EN

Stack Overflow用户

发布于 2011-05-23 09:38:25

这只是部分帮助,但是新的WCF Web API库在HttpBehavior上有一个名为TrailingSlashMode的属性,可以将其设置为忽略或重定向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6073581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档