【问题标题】:RoutePrefix does not work Asp.NET MVCRoutePrefix 不起作用 Asp.NET MVC
【发布时间】:2017-12-19 12:45:06
【问题描述】:

RoutePrefix 对我不起作用。

控制器

[RoutePrefix("example-name")]
public class HomeController : Controller
{
        public ActionResult Index()
        {
            ViewBag.Title = "Home Page";

            return View();
        }
}

路由配置

public static void RegisterRoutes(RouteCollection routes)
{
       routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

       routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
       routes.MapMvcAttributeRoutes();
}

索引页面

 @Html.ActionLink("click me", "index","example-name");

我已经完成了所有的基本步骤,但是我没有得到 404

找不到资源。

System.Web.Mvc.dll 的版本是 5.2.3.0

【问题讨论】:

  • 请查看我的回复:我发现您的代码有问题...如果您为控件指定 RoutePrefix 属性,则需要为操作指定 Route 属性.....您尚未应用 [Route]在你的方法上
  • 你能按照我的建议一步一步地尝试吗?一旦你改变了,你需要粘贴这个网址:localhost:8080/hometest/Index

标签: c# asp.net-mvc routing attributes


【解决方案1】:

我想我找到了解决方案,您必须进行以下更改

1.最重要的是:如果为控件指定RoutePrefix属性,则需要为动作指定Route属性。

 [RoutePrefix("hometest")]
    public class HomeController : Controller
    {
        [Route]
        public ActionResult Index()
        {
            return View();
        }

          [Route("About")]
        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }
}

2.你的html视图是这样的

 <li>@Html.ActionLink("hometext", actionName: "Index", controllerName: "hometest")</li>

3.将routes.MapMvcAttributeRoutes();移到MapRoute之前,如下所示。

   public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapMvcAttributeRoutes();
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

【讨论】:

  • 感谢您帮助我,但是该解决方案对我不起作用。我遵循相同的步骤。
  • 问题是我找不到控制器,如果找不到视图,控制器会出现 404 错误 asp.net 显示未找到不同的异常视图。
  • 更改后,只需这样做:localhost:8080/hometest/Index....here localhost 端口号被您的机器详细信息替换...如果您从 Visual Studio 开始,只需添加 /hometest/Index
  • 您不必在每个动作上都指定路由属性。您可以将 [Route("{action}")] 定义为控制器上的属性。另外,你的controllerName 不是"Home" 而不是"hometest" 在上面的第二步吗?
【解决方案2】:

routes.MapMvcAttributeRoutes();

在任何其他路由配置方法之前

【讨论】:

  • 他得到了[Route]……这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 2011-06-13
  • 2019-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 2012-11-28
  • 2017-02-20
  • 2012-01-22
相关资源
最近更新 更多