仅使用控制器的两个参数之一进行路由

时间:2013-02-18 23:01:19

标签: asp.net-mvc asp.net-mvc-3 routing asp.net-mvc-routing url-routing

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

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

            return View(b);
        }

它会自动创建此网址:

  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
            );

我该怎么办? 感谢...

1 个答案:

答案 0 :(得分:0)

如果你看到" b"参数从当前请求中渗透,您可以设置" b"参数显式为空字符串以避免此行为:

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

reported这个"功能"作为一个错误,但微软的开发人员似乎认为这种行为应该使您的网址更容易配置,并且他们不打算修复它。

  

您在此处看到的是路由功能,其中" ambient"值(即在传入请求的URL中检测到的值)用于简化(有时......)生成到其他页面的路由。

     

您可以在此StackOverflow帖子中查看我的答案(名称为" Eilon"),其中我将更详细地解释行为:   How Can I Stop ASP.Net MVC Html.ActionLink From Using Existing Route Values?

     

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

     
      
  1. 使用命名路由确保只使用您想要的路由来生成URL(这通常是一种很好的做法,尽管它在这种特定情况下无法提供帮助)
  2.   
  3. 明确指定所有路径参数 - 甚至是您想要为空的值。这是解决这一特定问题的一种方法。
  4.   
  5. 您可以使用Razor的语法或调用Url.Content("〜/ someurl")而不是使用路由来生成网址,以确保不会发生额外(或意外)处理将发生在您尝试生成的网址上。
  6.         

    谢谢,   Eilon