我正在使用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
有没有其他人遇到区域路由问题?
答案 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}")
,一切都运行良好