当尝试将参数传递给一个简单的控制器时,我收到的参数始终为null。
控制器
public class GetOrgController : Controller
{
private DirectoryEntities de;
public getOrgController()
{
de = new DirectoryEntities();
}
// GET: getOrg
public ActionResult Index(string district)
{
getorg_Result org = de.getorg(district).FirstOrDefault();
return View(org);
}
}
当我尝试使用参数localhost:660366/GetOrg/Index/D123
导航到该网址时,区变量始终为null
。
我想也许它必须用默认的RouteConfig
做一些事情。当我在默认路由配置之前放置一个新值时它工作了!但是现在,每当我尝试启动应用程序时,它首先会转到GetOrgController
。当我想要一个具有不同参数的新控制器时会发生什么?我每次都要这样做吗?这是我的新RouteConfig和新条目。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "GetOrg",
url: "{controller}/{action}/{district}",
defaults: new { controller = "GetOrg", action = "Index", district = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我实际上最初在Web Api 2中开始做Rest,但是视图模型吸引我到MVC。在方法之上指定我想要的路径/参数比在下面容易得多。这在MVC中是否可行?
WebApi2
[Route("Index/{district}")]
public ActionResult Index(string district)
{
getorg_Result orgs = de.getorg(district).FirstOrDefault();
return View(orgs);
}
上述方法似乎比在RouteConfig
答案 0 :(得分:1)
这两条路线毫无意义。第一个说,对于 ANY 控制器, ANY 方法默认为GetOrgController
。这不是你想要的,因为现在id
不适用于所有其他控制器,第二个MapRoute
接近重复。
routes.MapRoute(
name: "GetOrg",
url: "{controller}/{action}/{district}",
defaults: new { controller = "GetOrg", action = "Index", district = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
你真正应该做的是说任何以GetOrg开头的电话,然后为任何方法拨打GetOrgController
....
routes.MapRoute(
name: "GetOrg",
url: "GetOrg/{action}/{district}",
defaults: new { controller = "GetOrg", action = "Index", district = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 1 :(得分:-1)
那是因为两个路径都是通用的,这就是它默认命中第一条路线的原因所以你可以删除UrlParameter.Optional
以便路线应该有点具体
routes.MapRoute(
name: "GetOrg",
url: "{controller}/{action}/{district}",
defaults: new { controller = "GetOrg", action = "Index"}
);
但是你仍然可以使用默认路由,除非你想使用像random/234
这样的自定义网址,否则不需要额外的路由