MVC路由参数根本不起作用

时间:2015-03-21 16:54:16

标签: c# asp.net-mvc asp.net-mvc-routing

我已经找到了解决方案,但即便是最简单的例子也没有正常工作。传递单个参数{id}可以成功运行,但这是唯一有效的参数。将单个参数更改为其他任何参数都会失败在下面的示例中,多个参数也会失败。似乎唯一可行的参数是" id"。

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
          name: "Servers",
          url: "{controller}/{action}/{id}/{a}",
          defaults: new
          {
            controller = "Test"
          }
        );
    }

public class TestController : Controller
{
  [HttpGet]
  public ActionResult Monster(string id, string a)
  {
    return Json(new { success = id }, JsonRequestBehavior.AllowGet);
  }
}

url localhost / Test / Monster / hi成功读取参数为" hi"。指定localhost / Test / Monster / hi / hello失败并给出404。

5 个答案:

答案 0 :(得分:0)

试试这个:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
          name: "Servers",
          url: "{controller}/{action}/{id}/{a}",
          defaults: new
          {
            controller = "Test",
            id = UrlParameter.Optional,
            a = UrlParameter.Optional 
          }
        );
    }

另外,这是你唯一的路线吗? 路由设置的顺序很重要,使用以后的路由覆盖路由非常容易。我无数次犯了这个错误。

答案 1 :(得分:0)

如果操作不是可选的,您应该为其指定默认值。请尝试:

routes.MapRoute(
          name: "Servers",
          url: "{controller}/{action}/{id}/{a}",
          defaults: new
          {
            controller = "Test",
            action = "Monster"
          }
        );

答案 2 :(得分:0)

在你的方法中你已经指定了参数字符串a所以当你传递URl localhost / Test / Monster / hi / hello时,MVC将在url中查找参数a,因为它匹配表单post参数和参数功能

所以这个链接可以帮助你,因为它帮助了我

http://www.codeproject.com/Articles/299531/Custom-routes-for-MVC-Application

答案 3 :(得分:0)

这是一个非常晚的响应,但问题是有一个区域被进一步注册到下游导致路由问题。正在注册的区域有一个可选的url参数,用于路由。利用这个注册区域解决了这个问题。

答案 4 :(得分:-1)

很抱歉,但正如你所说

  

本地主机/测试/怪物/您好

工作意味着只配置了一个参数路由...您是否尝试重新启动IISExpress,因为路由在第一次调用时加载并且只有一次...

在路由中进行更改后,您必须从Icon Tray中停止IIS Express并重新运行项目然后使用一个参数它应该抛出错误..因为您没有设置这些选项它只会在您指定时工作两个参数。