我在Visual Studio 2015 Update 3中创建了一个新的ASP.NET MVC 5项目,一切都非常标准。我有这个控制器:
public class UsersController : BaseController
{
[HttpGet]
public async Task<ActionResult> Newest()
{
var newestUsers = await Database.Users.OrderByDescending(u => u.ID).Take(100).ToListAsync();
return View(newestUsers);
}
[HttpGet]
[Route("{id}")]
public async Task<ActionResult> GetUser(long id)
{
var user = await Database.Users.FindAsync(id);
return View(user);
}
}
我的BaseController
来自常规MVC Controller
,它包含我应用的一些常见属性。没什么特别的。
当我转到/users/newest
时,会加载相应的页面,但是当我转到/users/1
时,我会立即收到404找不到的错误。我已尝试将路线更改为~/{id}
,但无济于事。我的路线配置是标准的,自动生成的,我无法触及它:
public class RouteConfig
{
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 }
);
}
}
为什么没有点击GetUser
行动?
更新:由于某种原因,它开始无法再次运行。我什么都没做。在我添加routes.MapMvcAttributeRoutes();
之后,它仍在工作,它仍在那里,但我又开始获得404。
答案 0 :(得分:1)
好吧我不知道它是如何消失的(或者它为什么不存在)但我错过了路由配置中的routes.MapMvcAttributeRoutes();
方法。添加该方法解决了这个问题。
更新:我还需要添加RoutePrefix
以使路由正常工作,并且我必须为具有参数的任何操作显式添加正确的路由。遗憾的是MVC无法自己映射它们。
答案 1 :(得分:-1)
在getuser之上获取额外的Id路由 - 这不是必需的。
您的路线不正确 - 应该是users / getuser / 1