0

我正在使用 asp.net mvc 4 来构建一个 Web 应用程序。

要为我使用 ActionLink 的操作创建 url,如下所示:

@Html.ActionLink("Details", "Details", new { id=item.PrimaryKey })

item.PrimaryKey可以是字符串,因此它可以包含点或斜线或任何其他特殊字符;当它包含点或斜线时,我得到一个404 error. ¿ 我怎样才能避免它?

我在这里找到了解决方案

http://mrpmorris.blogspot.mx/2012/08/asp-mvc-encoding-route-values.html

但它很复杂

¿ 有没有更简单的解决方案?

4

2 回答 2

2

我在这里找到了解决方案

http://mrpmorris.blogspot.mx/2012/08/asp-mvc-encoding-route-values.html

但它很复杂

那是因为你试图解决的问题很复杂。你可以看看following blog postScott Hanselman 的文章,他解释了这样做的各种挑战。我将总结他的结论:

在为在请求路径中获得疯狂的东西所做的所有努力之后,值得一提的是,简单地将值保留为查询字符串的一部分(还记得本文开头的 WAY 吗?)更容易、更清洁、更灵活,而且更多安全的。

所以基本上如果你的 id 可以包含任何字符,它们应该作为查询字符串参数传递,而不是 Uri 路径的一部分。

但是,如果您坚持并希望将 id 作为 Uri 路径的一部分,您可能会受到 StackOverflow 的启发。现在查看浏览器的地址栏。你会看到这个:

https://stackoverflow.com/questions/15697189/special-characters-in-actionlink-asp-mvc

请注意 url 如何包含 2 个标记:实际 id 和 SEO 友好名称。Jeff Atwood 展示了sample filter function他们用来生成那些对 SEO 友好的slug。蛞蝓仅用于 SEO 目的。您可以将其替换为您想要的任何内容并获得相同的结果:

https://stackoverflow.com/questions/15697189/foo-bar
于 2013-03-29T09:37:52.117 回答
0

您可以使用Server.UrlEncode()对其进行编码:

@Html.ActionLink("Details", "Details", new { id=Server.UrlEncode(item.PrimaryKey) })

以示例参考 msdn

于 2013-03-29T05:15:55.320 回答