首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RouteAttribute获取操作的RouteData

使用RouteAttribute获取操作的RouteData
EN

Stack Overflow用户
提问于 2018-08-08 15:19:38
回答 1查看 116关注 0票数 1

我有一个自定义的IRouter实现,它的基本形式如下所示,为了简单起见,我硬编码了一些值:

代码语言:javascript
复制
public class MyRouter : IRouter
{
  private readonly IRouter router;
  public MyRouter (IRouter router)
  {
    this.router = router;
  }

  public async Task RouteAsync(RouteContext context)
  {
    context.RouteData.Values["controller"] = "Home";
    context.RouteData.Values["action"] = "Index";
    context.RouteData.Values["area"] = "";
    await router.RouteAsync(context);
  }
}

这适用于没有定义[Route]属性的简单控制器:

代码语言:javascript
复制
public class HomeControlller
{
  public IActionResult Index()
  {
    return View();
  }
}

再说一次,这是正确的。转到/将显示该页面。然而,一旦我添加了[Route]属性,我就得到了一个404:

代码语言:javascript
复制
[Route("foo")]
public class HomeControlller
{
  [Route("bar")]
  public IActionResult Index()
  {
    return View();
  }
}

现在,如果我转到/foo/bar,我将看到该页面。然而,如果我去/,我会得到404分。我该如何解决这个问题呢?如果我在转到/foo/bar时查看RouteData值,我仍然看到值HomeIndex分别作为控制器和动作的值。

EN

回答 1

Stack Overflow用户

发布于 2018-08-09 17:35:12

这是设计好的。

操作要么按常规路由,要么按属性路由。将路由放在控制器或操作上会使其属性路由。定义属性路由的操作不能通过传统路由到达,反之亦然。控制器上的任何路由属性都会路由控制器属性中的所有操作。

参考:Mixed routing: Attribute routing vs conventional routing

对于Conventional router,它使用MvcRouteHandler,而Attribute route将使用MvcAttributeRouteHandler。当ControllerActionRoute[]一起使用时,当您请求具体方法时,它不会转到Converntional router

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51740729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档