routes.MapRoute(
name: "Home",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Process",
url: "Process/{action}/{id}",
defaults: new { controller = "Process", action = "", id = UrlParameter.Optional }
);请帮助我了解路线。
发布于 2017-11-29 19:00:12
因为当您请求yourBaseUrl/Process/时,它与路由模式{controller}/{action}/{id}相匹配,这是定义的第一个路由(称为Home)的url模式。因此,它将尝试将请求发送到action方法,并且由于请求url中没有action方法段,因此它将尝试使用在该路由注册中定义的默认方法,即Index。您将获得404,因为在您的Index中没有ProcessController操作方法。如果将Index()操作方法添加到ProcessController中,它将执行该操作并返回结果。
理想情况下,您应该在通用路由定义之前定义所有特定的路由定义。如果希望/Process返回由List方法返回的响应,请将其设置为路由注册中的默认操作。
routes.MapRoute(
name: "Process",
url: "Process/{action}/{id}",
defaults: new { controller = "Process", action = "List", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);另一个选项是使用默认的通用路由注册,就像在RouteConfig中一样,并使用属性路由使List方法由/Process/请求处理。
public class ProcessController : Controller
{
[System.Web.Mvc.Route("Process")]
public ActionResult List()
{
return Content("process list action method :)");
}
}https://stackoverflow.com/questions/47559741
复制相似问题