【问题标题】:ASP.NET MVC route returning 404 without actionASP.NET MVC 路由返回 404 无操作
【发布时间】:2009-11-13 23:35:22
【问题描述】:

我正在使用 MVC2 Preview 1 开发一个非常简单的应用程序。

我有一个名为 ContentController 的控制器。我的问题是 /Content/Index 工作正常,但 /Content/ 返回 404。我在 Studio Development Server 上运行应用程序。

使用 RouteDebugger 测试,但 /Content/ 返回 404,并且不显示任何调试信息。

我没有更改路由代码:

       routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

这是我的控制器:

public class ContentController : Controller
{
    IRepository _repo = new SimpleRepository("db", SimpleRepositoryOptions.RunMigrations);

    public ActionResult Index()
    {
        var content = _repo.GetPaged<Content>(0, 20);
        return View(content);
    }

【问题讨论】:

  • 您是在 IIS 还是可视化 Web 服务器下运行它?如果是 IIS,哪个版本?您是否使用 /Content(与 /Content/)得到相同的结果?
  • 嗯...这很奇怪。你能贴一张路由调试器输出的截图吗=
  • 我在 Visual Studio 2008 提供的内置 Web 服务器上运行它。
  • /Content 和 /Content/ 的结果相同

标签: asp.net asp.net-mvc asp.net-mvc-routing


【解决方案1】:

这是在黑暗中拍摄的,但是您是否也有一个名为 /Content/ 的目录?

【讨论】:

  • 宾果游戏!结果是 MVC 模板创建了一个名为 Content 的目录,其中放置了 Site.css 文件。现在我觉得自己像个白痴:(非常感谢大家的帮助!
  • 这里也一样。但是我的代码创建了一个与控制器同名的文件夹。
【解决方案2】:

/Content 是一个控制器,它基本上只是一个动作的集合。 ASP.NET MVC 需要知道您要运行哪个操作,因此通过省略操作,asp.net mvc 不知道要返回什么操作并给出 404。

您可以通过添加路由来告诉它默认值:

例如:

routes.MapRoute("ContentDefault", "Content", new {controller = "Content", action = "Index"});

属性定义如下:

'ContentDefault`:路由名称(在您的路由表中必须是唯一的)

内容: URL 段(尝试将其更改为 'Content/Much/Longer/URL',然后转到 http://localhost/Content/Much/Longer/URL 以查看其工作原理)

新的 {controller=.., action=...}:为此路由运行哪个控制器/动作组合。

您还可以在控制器中覆盖 HandleUnknownAction:

    protected override void HandleUnknownAction(string actionName)
    {
         return RedirectToAction("index");
    }

哦,顺便说一句,关于路由的额外建议......如果你在大括号 {} 中添加一些东西到路由,这些将作为属性传递给操作。

例如/Content/Much/Longer/Url/{page}

所以网址http://localhost/Content/Much/Longer/Url/999

会将 999 作为页面属性传递给您的操作

public ActionResult Index(int Page) { }

我喜欢 MVC - 永远不会回到 WebForms - 这就是 Web 开发应该有的样子!

【讨论】:

  • 感谢您提供的信息,这对我的工作非常具体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
  • 1970-01-01
相关资源
最近更新 更多