0

我有一个带有两个参数的 actionresult:

 public ActionResult Index(int a,string b)
        {
            //some code

            return View(b);
        }

它会自动创建此 url:

  mysite.com/a=1&b=http://site.com/b=1

我只需要在我的网址中显示第一个参数“a”:

  mysite.com/a=1

我使用在 global.ascx 中创建的 MVC 的默认路由:

 routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

我应该怎么办?谢谢...

4

1 回答 1

0

如果您看到“b”参数从当前请求中溢出,您可以将“b”参数显式设置为空字符串以避免这种行为:

@Html.ActionLink("Home", "Index", "Home", new { a = 1, b = "" }, null)

我将此“功能”报告为错误,但 Microsoft 的开发人员似乎认为这种行为应该使您的 URL 更易于配置,并且他们不打算修复它。

您在这里看到的是路由功能,其中“环境”值(即在传入请求的 URL 中检测到的值)用于简化(有时...)到其他页面的路由的生成。

您可以在此 StackOverflow 帖子中查看我们的答案(名称为“Eilon”),我在其中更详细地解释了该行为: 如何阻止 ASP.Net MVC Html.ActionLink 使用现有路由值?

最终,如果您想最大程度地控制为 URL 生成的内容,可以考虑以下几个选项:

  1. 使用命名路由来确保只有你想要的路由会被用来生成 URL(这通常是一个很好的做法,尽管它在这个特定的场景中没有帮助)
  2. 明确指定所有路由参数 - 甚至是您希望为空的值。这是解决这个特定问题的一种方法。
  3. 您可以使用 Razor 的 ~/ 语法或调用 Url.Content("~/someurl") 来确保您尝试生成的 URL 不会发生额外(或意外)处理,而不是使用路由来生成 URL。

谢谢,艾隆

于 2014-11-25T00:45:25.730 回答