c# - url 资源包含&符号时出错

标签 c# asp.net-web-api

我们有一个带有以下资源 url 的 web api。

http://www.example.com/book/bookid/name/bookname

现在有一些书的名字带有“&”符号,当请求这些名字时,我们收到以下错误

使用的网址:

http://www.example.com/book/123/name/ban&ban

错误:从客户端 (&) 检测到具有潜在危险的 Request.Path 值

我们尝试传递或使用 & 的编码值,即 %26 并得到相同的错误。

使用的网址:

http://www.example.com/book/123/name/ban%26ban

错误:从客户端 (&) 检测到具有潜在危险的 Request.Path 值

现在,当我在 httpruntime 元素的 web.config 中添加 requestPathInvalidCharacters=""属性时,它开始对上述两个 url 正常工作。但是,当我阅读不同的文章时,据说使用 requestPathInvalidCharacters=""属性不是一个好习惯。

另外,由于生产中有很多书名带有“&”和不同的特殊字符,我们不可避免地会在书名中发送“&”符号,请问有什么好的处理方法吗?

最佳答案

您应该选择在查询字符串中使用参数而不是路径。例如: http://www.example.com/book/bookid?name=Fizz&bookname=Buzz

这里有一些解释为什么会引发这个异常: http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

关于c# - url 资源包含&符号时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50475697/

相关文章:

azure - ASP.Net core Web 应用程序上的 .config 文件和 Azure 设置之间的混淆

c# - Linq over jObject.Parse - 适用于控制台应用程序,但不适用于 WebApi 项目

c# - 如何停止 SocketException : "A blocking operation was interrupted by a call to WSACancelBlockingCall" from being thrown?

c# - 尽管有效的 XPath 查询,iterator.MoveNext() 返回 false

c# - 如何创建最小化的持续通知,如 USB 连接或谷歌天气

asp.net-mvc-4 - 使用 Web API 和 RavenDB 进行继承的自定义模型绑定(bind)器

c# - 身份框架和自定义密码哈希器

c# - Azure 函数中的 Autofac InstancePerRequest 范围

c# - WCF 中用于操作契约(Contract)的路由

rest - 使用 HTTP 204 vs 200 vs 404 来安全地表示资源不存在