【发布时间】:2017-06-06 14:41:55
【问题描述】:
当参数的空格编码为 + 而不是 %20 时,我的服务器返回 404 错误。我不明白为什么。
路线的形式是
[Route("/Search/PRM1/{prm1}/PRM2/{prm2}/PRM3/{prm3}")
我的第一个问题是如何让服务器理解这种 URL?
https://example.com/Search/PRM1/prm1%20value/PRM2/prm2+value/PRM3/prm3%20value
我的第二个问题是如何自动生成带有+ 而不是%20 的网址,哪个更易于阅读?搜索引擎优化有区别吗?
在cshtml中的服务器端生成URL:
<a href="/Search/PRM1/@prm1/PRM2/@prm2/PRM3/@prm3">link</a>
带有 prmX 变量的“明文”文本(包括空格)。使用@System.Net.WebUtility.UrlEncode(prm2)而不是@prm2时生成了+ URL
我检查了下面的链接,但该解决方案似乎不适用于 ASP.Net Core: WebAPI route 404's when there is a trailing space in the URL
【问题讨论】:
-
(Please) Stop Using Unsafe Characters in URLs。如果您希望您的 URL 是“人类可读的”,您应该用
-替换任何空格(破折号,而不是下划线 - 这也是 SEO 友好的)。如果不是,那么编码是正确的方法,因为无论如何你将它分割成一个 URL必须是机器可读的。 -
@NightOwl888 您的链接将安全字符定义为
Alphanumerics [0-9a-zA-Z], special characters $-_.+!*'(),, and reserved characters used for their reserved purposes,因此应包含“+”。 %20 SEO 是否友好?如果是这样,我可以用 %20.. -
空格 (
%20) 不是安全字符。 Microsoft 修复了 ASP.NET 将空格转换为+的损坏行为,现在可以将其正确编码为%20。如果您需要使用空格(因为它是搜索功能),则将您的参数添加到查询字符串并将空格编码为%20。
标签: asp.net-mvc asp.net-web-api asp.net-core