代码之家  ›  专栏  ›  技术社区  ›  Josh Russo

ASP。在区域内包含Id时,NET Core MVC虚拟路径生成不正确

  •  1
  • Josh Russo  · 技术社区  · 8 年前

    我在ASP公司工作。NET Core 2.0 MVC应用程序,我正在尝试使用路由信息构建URL。只要我坚持使用区域、控制器和动作,一切都很好。只要我尝试使用Id,路径就会返回错误

    当我包括除id之外的所有内容时,我得到了我所期望的

    <a asp-area="Admin" asp-controller="Users" asp-action="Detail">User detail</a>
    

    或者从UsersController内部

    Url.Action("Detail")
    

    生产

    http://localhost:55556/Admin/Users/Detail
    

    当我包括id时

    <a asp-area="Admin" asp-controller="Users" asp-action="Detail" asp-route-id="1">User detail</a>
    

    Url.Action("Detail", new { id = 1 })
    

    我只得到

    http://localhost:55556/1
    

    这就是我的路线

    routes.MapRoute(
        name: "areas",
        template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
    );
    
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}"
    );
    

    有人能看出我错在哪里吗?

    使现代化

    这似乎与该地区有关。当我离开这个区域时,它产生了我所期望的

    Url.Action("Detail", "Users", new { id = 1 })
    

    生产

    /Users/Detail/1
    

    尽管这实际上并不存在。但是当我添加面积时

    Url.Action("Detail", "Users", new { id = 1, area = "Admin" })
    

    我明白了

    /1
    

    其他人在区域布线方面有问题吗?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Josh Russo    8 年前

    我想出来了。我有一个错误的 [HttpGet] 属性。

    我有

    [HttpGet("{id:int}")]
    public ActionResult Detail(int id)
    {
        var user = _userRepository.GetUserById(id);
        var model = Mapper.Map<User, UserDetailModel>(user);
    
        return View(model);
    }
    

    没有意识到我在属性中设置的路由完全重写了默认路由,并且不只是应用于参数

    我删除了 ("{id:int}") 一切都很顺利