У меня есть контроллер BlogController с парой действий:
1)Index(string id) - show all posts/show single post if parameter id specified
2)New() - add new post
3)Delete() - delete post
4)And some more another actions
Так что, если я наберу в браузере mysite/blog
, я смогу увидеть все сообщения, если наберу mysite/blog/postnameid
Я хочу увидеть одно сообщение.
проблема в том, что когда я печатаю mysite/blog/postnameid
, это не работает (The resource cannot be found.
), но если я набираю mysite/blog/index/postnameid
, то это работает.Как я мог заставить mysite/blog/postnameid
работать так же.
Вот мой маршрут блога в global.ascx
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRouteLowercase(
"Blog", // Route name
"Blog/{action}/{id}", // URL with parameters
new { controller = "Blog", action = "Index" } // Parameter defaults
);
routes.MapRouteLowercase(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Чем, если я его так изменить
routes.MapRouteLowercase(
"Blog", // Route name
"Blog/{id}", // URL with parameters
new { controller = "Blog", action = "Index" } // Parameter defaults
);
mysite/blog/postnameid
работает, но все другие действия, такие как New (), Delete () перестают работать после этого (The resource cannot be found.
)
UPDATE: Я забыл упомянуть, что id является stingне инт.поэтому из ответа @Darin я изменил new { id = @"\w+" }
на new { id = @"\d+" }
и все швы работали, но теперь, когда я набрал blog/new
, например, он перенаправляется на show/new
insteard blog/new