【发布时间】:2017-09-28 17:33:27
【问题描述】:
ASP.NET/Mono MVC4 购物车应用程序用户产品代码作为 awstats 分析的 url 名称,例如:
http://myshop.com/Store/Details/PRODUCT1
使用默认路由和控制器
public class StoreController : MyApp.ControllerBase
{
public ActionResult Details(string id)
{
....
PRODUCT1 是产品代码。 如果产品代码在目录名称中包含 / 和其他不允许的字符,Web 服务器会抛出错误。
产品代码应该是人类可读的,因为分析会显示网址。 如何编码产品代码以作为目录名称传递并在控制器中解码? 编码后产品代码应保持唯一。
在 ASP.NET 中是否有一些内置函数或一些实现此功能的源代码?
使用jquery、jquery ui、razor 视图引擎。
更新
我尝试通过创建 Razor 助手在评论中推荐
@helper Details(string toode)
{
@Url.Action("Details", new { id = HttpUtility.UrlEncode(toode) });
}
然后使用
<a href="@Details(someproduct)">
这会导致错误:
检测到来自客户端 (%) 的潜在危险 Request.Path 值。 GET /Store/Details/S%c3%9c%c3%9cTAJA HTTP/1.0
% chareter 不允许出现在 url 路径中。 所以不能使用 UrlEncode。如何编码/解码?
【问题讨论】:
-
您可以使用 url 编码/解码 (HttpUtility.UrlEncode),但编码后的 url 看起来有点难看。我宁愿产品代码不包含这些有问题的字符,因此人类和服务器都可读。
-
用户喜欢
1/23:3/3+3/?A之类的产品代码。目前在 Razor 视图中使用@Url.Action("Details", new { product = "1/23:3/3+3/?A" })),但 awstats 分析将所有产品页面视为单个页面。我应该像@("~/Store/Details/"+HttpUtility.UrlEncode("1/23:3/3+3/?A"))那样手动创建网址还是有更好的方法?或者可以配置 awstats 或其他基于服务器的免费分析吗? -
1/23:3/3+3/?Aurlencoded 是1%2F23%3A3%2F3%2B3%2F%3FA。我不确定有人会喜欢它。但这是我的主观意见,如果您认为不是,请不要关注它。无论如何,如果你真的坚持使用这些尴尬的 url,urlencoding 听起来是唯一的解决方案。 -
% 字符不允许在 url 路径中。所以不能使用 UrlEncode。我更新了问题。如何编码/解码?
-
这是因为您的助手可能是错误的。我相信
Url.Action已经做了一些编码。试试"/Store/Details?id="+HttpUtility.UrlEncode(toode)。
标签: asp.net asp.net-mvc asp.net-mvc-4 razor urlencode