我是否必须为控制器中的每个操作结果路由一个特殊路由,或者您是否执行一条路由,并且必须遵循该标准认为控制器?我以为你可以创建一个默认路由,然后为你想要的任何实例创建一个特殊路由。我一直遇到一个问题,我的一条路线会正确地击中我的行动结果,但其他人不再有效。这段代码可能是错误的方式,但因此我在这里发布它的原因。如果可以,请尽量为我澄清这个问题。据我所知,我认为能够做{controller} / {action} / {id}。所以应该点击Settings / GetSite / {siteid}以获取以下内容
public ActionResult GetSite(int id);
路线配置:
routes.MapRoute(
"SettingsUpdateEnviorment",
"{controller}/{action}",
new { controller = "Settings", action = "UpdateProperties" },
new { httpMethod = new HttpMethodConstraint("POST") }
);
routes.MapRoute(
name: "ProfileRoute",
url: "Profiles/{userId}",
defaults: new
{
controller = "Profile",
action = "Index",
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"Settings", // Route name
"Settings/{id}", // URL with parameters
new { controller = "Settings", action = "Index" } // Parameter defaults
);
控制器代码:
public ActionResult Index(int id)
{
return View(model);
}
public ActionResult GetSite(int enviornmentID, string name)
{
return RedirectToAction("Index");
}
[HttpPost]
public ActionResult AddSite(int id)
{
return RedirectToAction("Index", new { id = id });
}
因此,URL按照预期的设置/ 1来命中索引actionresult索引(int id)。然后,当我尝试使用以下actionLink为GetSite(int enviornmentID,string name)执行ActionResult时:
@Html.ActionLink(site.Name, "GetSite", "Settings", new { enviornmentID = Model.Enviorment.EnvironmentID, name = site.Name }, null)
它正确地创建URL,如下所示:Settings / GetSite?enviornmentID = 1& name = CaseyTesting2,但是给出了一个错误,指出我正在尝试向我的Index(int id)actionResult发送一个空值。我认为既然我正在使用动作名称并且它是相同的参数,那么MVC会想出路线吗?为什么这对我不起作用,或者我做错了什么?谢谢!
答案 0 :(得分:0)
由于这篇文章http://www.itworld.com/development/379646/aspnet-mvc-5-brings-attribute-based-routing,我意识到自己在做什么。当我把一切都纠正的时候,我正在混淆订单。然后我错过了参数名称相同,当其他一切都正确时。因此,在尝试找出问题时,我一直遇到一些小问题。我也切换到了MVC5的属性路由,并且更喜欢它。
所以这是我现在正在运行的代码:
RoutConfig
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "ProfileRoute",
url: "Profiles/{userId}",
defaults: new
{
controller = "Profile",
action = "Index",
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
控制器代码
[Authorize]
[RoutePrefix("settings")]
[Route("{action=index}")]
public class SettingsController : ZenController
{
[Route("{id:int}")]
public ActionResult Index(int id)
{
return View(model);
}
[Route("GetSite/{sitename:alpha}")]
public ActionResult GetSite(string sitename)
{
return RedirectToAction("Index");
}
再次感谢大家!快乐的编码!