代码之家  ›  专栏  ›  技术社区  ›  GONeale

如果“捕获所有路由”不匹配,则显示404“找不到文件”视图

  •  1
  • GONeale  · 技术社区  · 15 年前

    我在ASP.NET MVC中有一个“捕获所有路由”设置,因此我可以捕获/此页、/该页等。

    当你点击一个页面时,动作被调用,比如 Index(string page) 然后 page 对数据库中的值进行测试,以确定是否可以找到该页。如果找不到,我想显示视图 FileNotFound 这是我的 ErrorController ,我不想重定向,因为我想将URL保留为 http://.../page-that-isnt-found 就像stackoverflow,如果你给它一个假问题-( https://stackoverflow.com/questions/zzz-aaa )

    现在我的问题在于找出代码,我已经尝试了两种方法:

    [ do page db check ]
    if (page == null)
       return RedirectToAction("FileNotFound", "Error");
       // return View("FileNotFound"); // can't opt for a controller ?
    

    我最接近的是 RedirectToAction() 但是,它当然会进行实际的重定向,并且我的URL指向/error,这不是所需的行为。我试过用 return View() 但似乎我不能指定控制器,只能指定视图名?

    2 回复  |  直到 15 年前
        1
  •  1
  •   jchapa    15 年前

    正确,通过返回视图,您指向的是要呈现的视图名称,而不是ActionMethod。您应该能够创建一个包含404页内容的视图(在同一个控制器的视图或共享视图中)。

    希望这有帮助。

        2
  •  1
  •   Community CDub    8 年前

    也可以使用server.transfer保留原始URL。这里有一个关于如何在ASP.NET MVC中实现这一点的好线索- How to simulate Server.Transfer in ASP.NET MVC?