【问题标题】:AttributeRouting - area with optional route parameterAttributeRouting - 带有可选路由参数的区域
【发布时间】:2013-09-10 20:16:28
【问题描述】:

是否可以有两条路线的区域。例如:

[RouteArea("{culture}/testarea")] <-- specific culture
[RouteArea("testarea")]  <-- default culture
LocalizableAreaBaseController ....

谢谢!

【问题讨论】:

    标签: asp.net-mvc attributerouting


    【解决方案1】:

    您可以通过路由约束来完成此操作。

    public class TestAreaAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "TestArea";
            }
        }
    
        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "TestArea_culture",
                "{culture}/TestArea/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new { culture = @"^[A-Za-z]{2}(\-[A-Za-z]{2})$"}
            );
    
            context.MapRoute(
                "TestArea_default",
                "TestArea/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
    

    或者

    [RoutePrefix("{culture:regex(^[A-Za-z]{2}(\-[A-Za-z]{2})$)}/TestArea")]
    [RoutePrefix("TestArea")]
    public class TestController : ApiController {
    }
    

    (这个特定的正则表达式约束将匹配“en”或“en-gb”之类的内容)

    【讨论】:

    • 嗨。谢谢回复。但是这将如何与 AttributeRouting 一起使用?
    • 我添加了一个使用 ASP WebApi 2.0 RoutePrefix 属性的示例。
    • 但是文化参数将在区域之后(testarea/en/...),我想在之前(/en/testarea/...)
    • 一个控制器不能有多个 RoutePrefix:您将收到“重复的 'RoutePrefix' 属性”错误。请参阅我的问题:stackoverflow.com/q/31053697/533460
    【解决方案2】:

    RouteArea 属性中还有另一个前缀,请使用它。这会奏效。

    [RouteArea("testarea"),AreaPrefix="{culture}/testarea"]

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2015-11-17
      • 1970-01-01
      • 2016-10-12
      • 2011-01-09
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多