我已经找到了解决方案,但即便是最简单的例子也没有正常工作。传递单个参数{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。
答案 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并重新运行项目然后使用一个参数它应该抛出错误..因为您没有设置这些选项它只会在您指定时工作两个参数。