【发布时间】:2017-05-22 09:07:54
【问题描述】:
我有一个 Web API 项目,具有以下端点:
GET api/search/{searchValue}
控制器代码:
[RoutePrefix("api/Search")]
public class SearchController : ApiController
{
[HttpGet]
[Route("{searchValue}", Name = "GenericSearch")]
[ResponseType(typeof(SearchResponse))]
public async Task<IHttpActionResult> Search(string searchValue) {
...
}
}
这适用于大多数搜索字符串。但如果搜索字符串以句点 (.) 字符结尾,则请求以 404 中断;它似乎将句点解释为路径的一部分,而不是查询的一部分。即使请求字符串是 Url 编码的,也是如此,例如
api/search/foo%2E
如果句点不是字符串的最后一个字符,则有效:
api/search/foo%2Ebar
将正确搜索“foo.bar”。
如何解决此问题,以便允许用户搜索以句点字符结尾的字符串?
更新:在将此问题作为this question 的副本关闭后,请允许我澄清为什么这个问题不同:
- 链接的问题试图在查询字符串中使用文字句点字符。我什至没有这样做;我将
.编码为%2E,但它仍然不起作用。 - 查询使用中间的句点字符。只有当它位于查询字符串的末尾时才会失败。
- 我已经有
<modules runAllManagedModulesForAllRequests="true" />(正如我的web.config中的accepted answer 所建议的那样。 - 我尝试按照highest-voted answer 中的建议为查询添加斜杠字符(即
api\search\foo%2E\)后缀;这没什么区别。 - 我尝试了那里建议的所有答案,但都没有任何作用。
【问题讨论】:
-
我总是想知道为什么我需要进行谷歌搜索... ;)
-
@PatrickHofman,触发太快了。这不是同一个问题。
-
那么你应该编辑问题并解释它。你知道盒子会告诉你这样做。据我所知。这是一个经典问题。
-
你能显示你的代码/路线吗?
-
@PatrickHofman 添加了控制器代码。
标签: c# asp.net-web-api asp.net-web-api-routing