C# MVC Uri参数为空
当试图将一个参数传递给一个简单的控制器时,我收到的参数总是空的 控制器C# MVC Uri参数为空,c#,asp.net-mvc,C#,Asp.net Mvc,当试图将一个参数传递给一个简单的控制器时,我收到的参数总是空的 控制器 public class GetOrgController : Controller { private DirectoryEntities de; public getOrgController() { de = new DirectoryEntities(); } // GET: getOrg public ActionResult Index(strin
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
导航到该url时,地区变量总是null
我想它可能需要使用默认的RouteConfig
。当我把一个新值放在默认路由配置之前时,它起作用了!但是现在,每当我尝试启动应用程序时,它都会首先进入GetOrgController
。当我想要一个具有不同参数的新控制器时会发生什么?我每次都得这么做?这是我的新路线图和新条目
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 }
);
实际上,我最初是在WebAPI2中开始做Rest的,但是视图模型吸引了我到MVC。在方法上面指定我想要的路由/参数要容易得多,如下所示。这在MVC中可能吗
WebApi2
上述方法似乎比必须依赖于控制器在
RouteConfig
中的正确顺序要干净得多,这是因为两个路由都是通用的,这就是为什么默认情况下它会命中第一个路由,因此您可以删除UrlParameter。可选的
,因此路由应该有点特定
routes.MapRoute(
name: "GetOrg",
url: "{controller}/{action}/{district}",
defaults: new { controller = "GetOrg", action = "Index"}
);
但是你仍然可以使用默认的路由,不需要额外的路由,除非你想使用像
random/234
这样的自定义url,这两个路由毫无意义。第一个表示,对于具有任何方法的任何控制器,默认值为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 }
);
为什么不直接说出地区Id?
…我想要下面这样。这在MVC中可能吗?
就像下面回答的@ErikPhilips一样,您的两条路由相互冲突。它们是完全相同的,第一个被击中的将是定义列表中的第一个。不要被愚弄,你可以简单地切换到RouteAttribute
,现在神奇地排序并不重要,因为它仍然重要。
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 }
);