我试图在我的MVC 5 web应用中实现替代路由。MVC替代路由失败,可选参数
我的控制器代码:
namespace MyMvcProject.Web.Controllers
{
[RoutePrefix("account")]
public class AccountController : Controller {
[Route("{param}")]
[Authorize]
public ActionResult Index(string param = null) {
...
击中URL时,伟大的工程:http://example.com/account/testparam
。 但是,我希望能够将值param
作为可选参数。
我已经尝试将[Route("{param}")]
更改为[Route("{param}*")]
,但从未输入Index()
方法。我也尝试将其更改为[Route("{param:string=Test}")]
,但我得到了路由运行时错误,其中包含术语string
。
我RoutConfig.cs
包含:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{param}",
defaults: new { controller = "Home", action = "Index", param = UrlParameter.Optional }
);
}
没有人有任何想法,我怎么可能会迫使Index()
有使用这种替代路由语法的可选参数?这在我的应用的其他部分非常有用,所以我想保留RoutePrefix
和Route
装饰器。
UPDATE
我仍然在试图找出了这一点,所以我改变了我的路线装饰以[Route("{param:int=0}")]
和我的构造函数public ActionResult Index(int id)
,它按预期工作(即http://example.com/account
就会认为http://example.com/account/0
被输入。这正是我想要的,只有使用string
数据类型
当我改变了装饰到:[Route("{id:string=\"\"}")]
和构造函数public ActionResult Index(string id)
,我看到了运行时错误:
The inline constraint resolver of type 'DefaultInlineConstraintResolver' was unable to resolve the following inline constraint: 'string'.
有关提示的提示。 – Nicholi 2016-02-29 23:11:43