UriTemplateWCF有没有简单的方法可以在同一个定义中使用多个UriTemplates。[WebGet(UriTemplate="{id}")]例如,我希望/API/{id}和/API/{id}/调用相同的东西。如果最后有/没有我不想要它。不是很简单,但是您可以在行为中使用动作选择器来去除尾随的“/”,如下例所示。publicclassStackOverflow_6073581_751090{[ServiceContract]publicinterfaceITest{[WebGet(UriTemplate="/API/{id}")]stringGet(stringid);}公共类服务:ITest{publicstringGet(stringid){returnid;}}publicclassMyBehavior:WebHttpBehavior{protectedoverrideWebHttpDispatchOperationSelectorGetOperationSelector(ServiceEndpointendpoint){returnnewMySelector(endpoint);}classMySelector:WebHttpDispatchOperationSelector{publicMySelector(ServiceEndpointendpoint):base(endpoint){}protectedoverridestringSelectOperation(refMessagemessage,outbooluriMatched){stringresult=base.SelectOperation(refmessage,outuriMatched);如果(!uriMatched){字符串地址=message.Headers.To.AbsoluteUri;如果(address.EndsWith("/")){message.Headers.To=newUri(address.Substring(0,address.Length-1));}result=base.SelectOperation(refmessage,outuriMatched);}返回结果;}}}publicstaticvoidTest(){stringbaseAddress="http://"+Environment.MachineName+":8000/Service";ServiceHosthost=newServiceHost(typeof(Service),newUri(baseAddress));host.AddServiceEndpoint(typeof(ITest),newWebHttpBinding(),"").Behaviors.Add(newMyBehavior());主机.Open();Console.WriteLine("主机打开");WebClientc=newWebClient();Console.WriteLine(c.DownloadString(baseAddress+"/API/2"));Console.WriteLine(c.DownloadString(baseAddress+"/API/2/"));Console.Write("按回车键关闭主机");控制台.ReadLine();主机.Close();这只是部分有用,但新的WCFWebAPI库在HttpBehavior上有一个名为TrailingSlashMode的属性,可以将其设置为Ignore或Redirect我发现最简单的方法是重载函数,如此处所述。以上就是C#学习教程:UriTemplateWCF分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
