相关疑难解决方法(0)

有没有办法让RoutePrefix以可选参数开头?

我想用这些URL到达Bikes控制器:

/bikes     // (default path for US)
/ca/bikes  // (path for Canada)
Run Code Online (Sandbox Code Playgroud)

实现这一目标的一种方法是每个Action使用多个Route Attributes:

[Route("bikes")]
[Route("{country}/bikes")]
public ActionResult Index()
Run Code Online (Sandbox Code Playgroud)

为了保持DRY,我更喜欢使用RoutePrefix,但不允许使用多个Route Prefix:

[RoutePrefix("bikes")]
[RoutePrefix("{country}/bikes")] // <-- Error: Duplicate 'RoutePrefix' attribute    
public class BikesController : BaseController

    [Route("")]
    public ActionResult Index()
Run Code Online (Sandbox Code Playgroud)

我试过使用这个Route Prefix:

[RoutePrefix("{country}/bikes")]
public class BikesController : BaseController
Run Code Online (Sandbox Code Playgroud)

结果:/ ca /​​ bikes工作,/自行车404s.

我试过让国家选择:

[RoutePrefix("{country?}/bikes")]
public class BikesController : BaseController
Run Code Online (Sandbox Code Playgroud)

相同的结果:/ ca /​​ bikes工作,/自行车404s.

我试过给国家一个默认值:

[RoutePrefix("{country=us}/bikes")]
public class BikesController : BaseController
Run Code Online (Sandbox Code Playgroud)

相同的结果:/ ca /​​ bikes工作,/自行车404s.

有没有其他方法可以使用属性路由实现我的目标? (是的,我知道我可以通过在RouteConfig.cs中注册路由来完成这些工作,但这不是我在这里寻找的东西).

我正在使用Microsoft.AspNet.Mvc 5.2.2.

仅供参考:这些是简化示例 - 实际代码具有{country}值的IRouteConstraint,例如:

[Route("{country:countrycode}/bikes")]
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-routing attributerouting

7
推荐指数
1
解决办法
4730
查看次数

有什么方法可以覆盖action方法的属性而不必覆盖整个方法?

我在MVC 5中使用属性路由,但我开始注意到一点痛点.我有一种情况,我想继承控制器,因为所有的动作都会做同样的事情.但是,我显然需要为子类的操作使用不同的路由.现在,我正在做类似于:

public class FooController : Controller
{
    [Route("foo", Name = "Foo")]
    public virtual ActionResult Foo()
    {
        ...

        return View();
    }
}

public class BarController : FooController
{
    [Route("bar", Name = "Bar")]
    public override ActionResult Foo()
    {
        return base.Foo();
    }
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很糟糕.我不是重复实际操作方法的代码(在某些情况下是相当多的),至少,但这对我来说感觉不对.此外,在基本操作方法定义由于某种原因而发生变化的情况下,这会成为一种维护噩梦.通常,我是否有某些方法可以在不必覆盖方法的情况下更改属性?也许,某些属性特定于路由.或者我只是运气不好?

c# asp.net-mvc attributerouting asp.net-mvc-5

5
推荐指数
1
解决办法
1125
查看次数