【问题标题】:Encrypted String originates 404 error in ASP.NET MVC加密字符串在 ASP.NET MVC 中引发 404 错误
【发布时间】:2014-04-14 23:35:16
【问题描述】:

在 ASP.NET MVC 5.1 上,我有一个接收加密字符串的操作,例如:

Nf7JnWp/QXfA9MNd52RxKpWg=

但是由于这个字符串中的斜线,我得到一个 404 错误...

我尝试使用 HttpUtility.UrlEncode 和 WebUtility.UrlEncode 对字符串进行编码;

但我一直遇到同样的问题。有谁知道如何解决这个问题?

谢谢,

米格尔

【问题讨论】:

  • 所以如果你传递一个没有/的字符串,你会被路由到正确的操作还是得到一个404?
  • 我被引导到正确的操作...
  • 你能提供来自你的源的渲染链接吗?
  • 是的,我尝试了以下@Html.ActionLink("Test", MVC.User.Remove(WebUtility.UrlEncode("L22llNf7JnWp/QXfA9MNd52RxKpWg="))) 并且呈现的网址是“localhost: 8580/remover/l22llnf7jnwp%252fqxfa9mnd52rxkpwg%253d”,我收到错误“从客户端 (%) 检测到潜在危险的 Request.Path 值”。如果我将它输入到 url 栏,我会收到 404 错误
  • 您可以尝试查询字符串(使用您的操作参数的名称:localhost:8580/remover?ID=l22llnf7jnwp%252fqxfa9mnd52rxkpwg%253d,而不是通过 URL 段传递它

标签: c# asp.net-mvc


【解决方案1】:

您可以通过定义自定义路由来解决此问题。现在我不知道你如何命名你的控制器或你的动作,所以我将使用通用名称。

routes.MapRoute(
    "SpecialControllerName",
    "CustomName/{*id}",
     new { controller = "CustomName", action = "CustomAction", id = UrlParameter.Optional }
);

public ActionResult Name(string id)
{
  //logic goes here

}

所以我们在这里所做的就是将行动排除在等式之外。现在,如果您调用http://yourdomain.com/CustomName/Nf7JnWp/QXfA9MNd52RxKpWg=,它将调用控制器CustomNameController 中的Action 方法CustomName

请注意,asp.net 框架采用您的路由配置中的第一个路由,该路由与其模式相匹配。如果您有 Defaultroute 并将新的自定义路由放置在 下方,它将失败。将自定义路由放在它上面,将起作用

关于 SO 的类似问题:

  1. ActionLink contains slash ('/') and breaks link

  2. URLs with slash in parameter?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多