尝试使用 AttributeRouting 创建默认 ASP.NET MVC 路由

发布于 2025-01-07 04:07:41 字数 859 浏览 0 评论 0原文

我刚刚开始在我的 ASP.NET MVC3 应用程序中使用 AttributeRouting 。我一开始根本没有控制器。 (新的空 MVC3 应用程序)

然后我创建了一个区域。 (称为:Documentation

然后我添加了一个控制器(称为:DocumentationController

然后我完成了这个..

[RouteArea("Documentation")]
public class DocumentationController : Controller
{
    [GET("Index")]
    public ActionResult Index()
    {
        return View();
    }
}

并且以下路线有效:/documentation/ index

但我怎样才能使这两条路线工作呢?

1 - / <-- (默认路由/未指定特定路由) 2 - /documentation <-- 未添加“索引”子路由部分。

这可以通过 AttributeRouting 来完成吗?

更新:

我知道如何使用默认的 ASP.NET MVC3 结构等来做到这一点。我想做的是通过 AttributeRouting 来解决这个问题。

i've just started using AttributeRouting with my ASP.NET MVC3 application. I started out with -no- controllers at all. (New Empty MVC3 Application)

I then made an area. (called: Documentation)

I then added a controller (called: DocumentationController)

I've then done this..

[RouteArea("Documentation")]
public class DocumentationController : Controller
{
    [GET("Index")]
    public ActionResult Index()
    {
        return View();
    }
}

And the following route, works: /documentation/index

but how can I make these two routes, work?

1 - / <-- (default route / no specific route specified)
2 - /documentation <-- no 'index' subroute section added.

Can this be done with AttributeRouting?

UPDATE:

I know how to do this with the default ASP.NET MVC3 structure, etc. What I'm trying to do is figure this out via AttributeRouting instead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

江湖正好 2025-01-14 04:07:41

我假设您希望“/”和“/documentation”映射到 DocumentationController.Index,是吗?如果是这样,请执行以下操作:

[RouteArea("Documentation")]
public class DocumentationController : Controller
{
    [GET("Index", Order = 1)] // will handle "/documentation/index"
    [GET("")] // will handle "/documentation"
    [GET("", IsAbsoluteUrl = true)] // will handle "/"
    public ActionResult Index()
    {
        return View();
    }
}

一点解释:

  • GET("Index") 的 Order = 1 将其标记为操作的主要路径。由于反射的工作原理,如果不使用 Order 属性,就无法确定操作上属性的顺序。 参见此处
  • 您可以将多个获取路由映射到一个单一动作。 查看此处
  • IsAbsoluteUrl 属性允许您覆盖 RouteArea 和 RoutePrefix 属性添加的 URL 前缀。这样最终的路由将匹配根请求。 查看此处

希望这有帮助。如果我对您想要做的事情的最初假设不正确,请发表评论。

I assume you want the "/" and "/documentation" to map to DocumentationController.Index, yes? If so, do this:

[RouteArea("Documentation")]
public class DocumentationController : Controller
{
    [GET("Index", Order = 1)] // will handle "/documentation/index"
    [GET("")] // will handle "/documentation"
    [GET("", IsAbsoluteUrl = true)] // will handle "/"
    public ActionResult Index()
    {
        return View();
    }
}

A bit of explanation:

  • GET("Index") has Order = 1 to mark it as the primary route for the action. Due to how reflection works, there is no way to determine the order of attributes on an action without using the Order property. See here
  • You can have multiple get routes mapped to a single action. See here
  • The IsAbsoluteUrl property allows you to override the URL prefixes added by the RouteArea and RoutePrefix attributes. So that final route will match root requests. See here

Hope this helps. If my initial assumption of what you're trying to do is incorrect, please comment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文