Asp.Net Core MVC - 路由问题

Posted

技术标签:

【中文标题】Asp.Net Core MVC - 路由问题【英文标题】:Asp.Net Core MVC - Routing Issue 【发布时间】:2018-08-11 14:48:22 【问题描述】:

TL;DR; 如何将“http://localhost/posts/1”路由到 PostsController 上的public IActionResult Index(int? id)

半长版: 我的路线定义为:

app.UseMvc(routes =>

    routes.MapRoute(
        name: "posts",
        template: "Posts/id:int?",
        defaults: new  controller = "Posts", action = "Index" );
    routes.MapRoute(
        name: "default",
        template: "controller=Home/action=Index/id:int?");
);

我的帖子控制器是:

[Route("posts")]
public class PostsController : Controller

    public IActionResult Index(int? id)
    
        return View();
    

问题是“http://localhost:5432/posts”工作正常,但“http://localhost:5432/posts/1”确实路由正确......

编辑1:

public class PostsController : Controller

    [Route("Posts/id:int?"
    public IActionResult Index(int? id)
    
        return View();
    

有效...但我不想为每个动作处理路线...这应该是一个非常大的系统...事情可能会像这样变得疯狂...

【问题讨论】:

如果使用字符串而不是 int 是否有效?您可以使用 int.TryParse 将字符串转换为代码中的 int @KenTucker no...同样的问题...我还修复了删除int约束的路线 【参考方案1】:

由于您使用Route 属性装饰控制器,因此您在路由表中定义的规则将不会实际使用。以下是引用文章Routing to Controller Actions:

动作要么是传统路由,要么是属性路由。配售 控制器上的路由或动作使其属性路由。

所以要解决您的问题,只需从 PostsController 中删除 [Route("posts")] 属性即可。

【讨论】:

以上是关于Asp.Net Core MVC - 路由问题的主要内容,如果未能解决你的问题,请参考以下文章

[十] ASP.NET Core MVC 中的路由

ASP.NET Core MVC 中两种路由的简单配置

asp.net core 系列 5 MVC框架路由(上)

如何在 ASP.NET CORE 5.0 MVC 中将登录设置为默认路由

ASP.NET Core 6框架揭秘实例演示[02]:基于路由MVC和gRPC的应用开发

asp.net core mvc razor page css未在特定路由上加载