当前位置: 首页 > 编程语言 > C#

使用查询字符串参数消除UriTemplate匹配的歧义共享

时间:2023-04-10 11:21:56 C#

使用查询字符串参数消除UriTemplate匹配的歧义我正在使用WCF4.0创建一个REST-fulWeb服务。我要做的是根据UriTemplate中的查询字符串参数调用不同的服务方法。例如,我有一个API,允许用户使用他们的驾驶执照或社会安全号码作为密钥来检索有关某人的信息。在我的ServiceContract/Interface中,我将定义两种方法:[OperationContract][WebGet(UriTemplate="people?ssn={ssn}")]stringGetPersonBySSN(stringssn);但是,当我使用这两种方法调用我的服务时,出现以下异常:ssn={ssn}'等效路径,但具有不同的查询字符串,其中查询字符串无法通过文字值消除歧义。有关详细信息,请参阅UriTemplateTable的文档。有没有办法使用UriTemplates来做到这一点?这似乎是一种常见的情况。太感谢了!根据这篇文章,这是不可能的,你必须这样做:[OperationContract][WebGet(UriTemplate="people/ssn/{ssn}")]stringGetPersonBySSN(stringssn);或者,如果要保留查询字符串格式,可以在UriTemplate的开头添加静态查询字符串参数。例如:[OperationContract][WebGet(UriTemplate="people?searchBy=driversLicense&driversLicense={driversLicense}")]stringGetPersonByLicense(stringdriversLicense);[OperationContract][WebGet(UriTemplate="people?searchBy=ssn&ssn={ssn}")]stringGetPersonBySSN(stringssn);我也遇到了这个问题,最终想出了一个不同的解决方案。我不想为对象的每个属性使用不同的方法。我所做的如下:在服务合同中定义URL模板而不指定任何查询字符串参数:[WebGet(UriTemplate="/People?")][OperationContract]ListGetPersonByParams();然后访问任何有效的查询字符串参数:publicListGetPersonByParms(){PersonParamsoptions=null;if(WebOperationContext.Current!=null){options=newPersonParams();options.ssn=WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["ssn"];options.driversLicense=WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["driversLicense"];options.YearOfBirth=WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["YearOfBirth"];然后,您可以使用/PersonService.svc/People?ssn=5552/PersonService.svc/People?ssn=5552&driversLicense=123456等URL搜索/PersonService.svc/People它还使您能够混合和匹配查询字符串参数,在以便仅使用您想要的内容并省略您不感兴趣的任何其他参数。它的优点是不会将您限制为只有一个查询参数。以上就是C#学习教程:使用查询字符串参数消除UriTemplate匹配歧义的所有内容分享,如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——这篇文章收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: