在区域

时间:2018-01-05 20:45:42

标签: asp.net-core-mvc asp.net-routing asp.net-core-routing

我正在使用ASP.NET Core 2.0 MVC应用程序,我正在尝试使用路由信息构建URL。只要我坚持使用Area,Controller和Action,一切都很好。一旦我尝试使用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 个答案:

答案 0 :(得分:0)

我明白了。我对该操作的[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}"),一切都运行良好