【发布时间】:2018-12-27 17:22:09
【问题描述】:
我有一个端点用于逐书查找。
书籍参考是可以包含空格和任何特殊字符的字符串,例如mybook、my book、my-book、my/book、book++
// GET api/books/reference/{reference}
[HttpGet("reference/{reference}")]
public ActionResult<BookItem> FindByReference(string reference)
这是我在测试时得到的:
GET api/books/reference/mybook
OK
GET api/books/reference/my book
OK
GET api/books/reference/my-book
OK
GET api/books/reference/my+book
404 Not found
GET api/books/reference/my/book
404 Not found
GET api/books/reference/book++
404 Not found
对这个reference 参数在 URL 路径中 进行编码以便通过路由正确解析的正确方法是什么?这可能吗?
【问题讨论】:
-
调用者需要正确转义这些字符。
-
谢谢,但是 - 很奇怪 - 如果我在
my book上使用UrlEncode我会得到my+book导致 404。 -
"api/books/reference/my book" 似乎是错误的 - 我希望这会失败,因为空间对路径无效......正如@JDB所说的问题很奇怪 -确实 Uri 需要首先正确构建,因此测试一次无效并没有真正的用处。阅读 RFC(或至少 stackoverflow.com/questions/4669692/…)可能有助于“有效”定义。
-
您将 url 作为查询参数传递(因为您使用了 UrlEncode)?这更令人困惑。您能否发布一些minimal reproducible example 的客户端代码和处理该查询参数的服务器端代码以调用您的 FindByReference 方法? (通常会使用
new Uri("http://fooo/bar var").AbsoluteUri来表示网址)
标签: c# asp.net-web-api