Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以使用带符号的RESTURL参数?_C#_.net_Rest - Fatal编程技术网

C# 是否可以使用带符号的RESTURL参数?

C# 是否可以使用带符号的RESTURL参数?,c#,.net,rest,C#,.net,Rest,使用System.ServiceModel库进行路由,我有一个REST服务,它有一个简单的模板 “{searchTerm}?opt={someSearchOpt}” 所以这个电话看起来像: 在没有选择的情况下搜索短语“河流探险” 这只是接受一个搜索短语并返回结果。它工作得很好。但是,如果搜索一个包含文字符号的短语,例如“Lewis&Clark”,我尝试了明显的url编码符号 刘易斯·克拉克 但即使如此,请求也从未被路由,但服务器立即返回400个错误请求。很明显,它被解释为查询字符串分隔符,并使

使用System.ServiceModel库进行路由,我有一个REST服务,它有一个简单的模板

“{searchTerm}?opt={someSearchOpt}”

所以这个电话看起来像:

在没有选择的情况下搜索短语“河流探险”

这只是接受一个搜索短语并返回结果。它工作得很好。但是,如果搜索一个包含文字符号的短语,例如“Lewis&Clark”,我尝试了明显的url编码符号

刘易斯·克拉克

但即使如此,请求也从未被路由,但服务器立即返回400个错误请求。很明显,它被解释为查询字符串分隔符,并使请求无效,因为此特定模板需要url参数,并且没有前面的“?”分隔符

由于这些搜索词组可能有其他限制字符,它们应该由客户机编码的url发送,并且当它们成功路由时,REST api会对参数调用HttpUtility.UrlDecode。因此,我的问题是,是否有某种技术可以将url编码的符号正确路由为REST url参数,并且是否未作为查询字符串分隔符预先解释和拒绝

更新:对于记录,如果搜索项应作为查询字符串参数(而不是url参数),则发送Lewis%26Clark就可以了。例如

所以为了澄清,我希望在REST模板中使用url参数时得到相同的结果。

线程也有类似的问题\解决方案


正如上面链接的答案中所提到的,我将避免在uri中对url字符进行编码,而是将这些字符放在查询字符串部分。

+1.只需等待,直到需要对斜杠进行编码…Sysmem.uri“有帮助地”取消所有斜杠,而无需作为安全性要求“。您的示例中没有查询字符串。。。不确定我是否遗漏了什么…@alexei…正是重点…它是一个REST api,因此搜索词是url参数,而不是查询字符串参数…更常见的示例是
http://myhost.contoso.com/restapi/customer/3
其中“3”是url参数。在我的示例中,“opt”查询字符串param是可选的,可以省略。。。考虑阅读/更新你的问题的标题比…另外,我不认为将任意字符串作为路径的一部分进行传递是一个好主意(检查路径中不允许的内容)。@alexei感谢您指出标题很模糊。我更新了它。至于你其余的答案,我想我是在与标准相悖。部分原因是restful uri突破了限制。想象一下,我有一个书店服务,可以让我按店名查找库存:
/bookstore/fiction/instock?title=encoded%20title
…这很容易使用,但如果“bookstore”是“barnes&noble”,它就会失败!无论如何……感谢您的回复。我支持动议,避免在路径中使用url编码字符,而是将它们粘贴到查询中。@TimothyShields我同意……尽管事后诸葛亮是20/20。API已经发布并公开,包含搜索词的符号是一个角落,只有在QA测试和发布后才出现。