【发布时间】:2014-12-02 13:43:30
【问题描述】:
我正在尝试在我的 MVC 5 网络应用中实现替代路由。
我有控制器代码:
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 装饰器。
更新
我仍在尝试解决这个问题,因此我将路由装饰器更改为[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) 时,我看到运行时错误:
“DefaultInlineConstraintResolver”类型的内联约束解析器无法解析以下内联约束:“字符串”。
【问题讨论】:
标签: c# model-view-controller routing