2016-12-18 5 views
2

Я создал новый проект ASP.NET MVC 5 в Visual Studio 2015 Update 3, и все довольно стандартно. У меня есть этот контроллер:ASP.NET MVC 5 не видит маршрут «{id}» в контроллере

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

Похоже, ваш маршрут должен быть пользователями/GetUser/1. Другими словами, вам не хватает раздела действия или вашего маршрута. – ninjaRoche

ответ

1

Хорошо, я понятия не имею, как это ушло (или почему этого не было), но мне не хватало routes.MapMvcAttributeRoutes(); метода в конфигурации маршрута. Добавление этого метода устранило проблему.

ОБНОВЛЕНИЕ: Я также должен был добавить RoutePrefix, чтобы получить маршруты, и я должен явно добавить правильный маршрут для любых действий, содержащих аргументы. Жаль, что MVC не может отображать их самостоятельно.

-1

Пройдитесь по вашей дополнительной маршрутизации Id над сервером getuser - это не нужно.

Ваш маршрут неверен - это должно быть пользователями/GetUser/1

+0

Что вы подразумеваете под "неправильным"? Я хочу, чтобы мой маршрут был 'users/1' not' users/getuser/1'. –

+0

Пользователи - контроллер, getuser - это действие. Вам нужны оба. Для новее вы вызываете пользователей контроллера и самое новое: пользователи/новейшие, и это то же самое для getuser: users/getuser. Поскольку вы также отправляете идентификатор, он становится пользователем/getuser/1. Я предполагаю, что когда это сработало раньше, это было просто дефолт для getuser, а не дизайн. Попробуй! – ninjaRoche

+0

Я не сказал, что это не сработает. Я хочу, чтобы мой маршрут был 'users/1'. Это может сработать, но я не хочу использовать 'users/getuser/1', поскольку это не имеет смысла в качестве URL-адреса. во всяком случае, у меня есть работа, добавив маршрут, как я сказал в своем собственном ответе. –

Смежные вопросы