使用以下
app.UseMvc(routes =>
{
routes.MapRoute(
name: "beacon",
template: "beacon/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
http://www.example.com/beacon
符合我的预期并点击BeaconController
但是http://www.example.com/beacon/001
没有击中任何控制器并进入404
我错过了什么?
答案 0 :(得分:2)
您指定了路由模式URL,但未提及控制器/操作应处理这些类型的请求。
您可以在定义路线时指定默认选项
app.UseMvc(routes =>
{
routes.MapRoute(
name: "beacon",
template: "beacon/{id?}",
defaults: new { controller = "Beacon", action = "Index" }
);
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
假设您的Index
方法的id
参数为nullable int type
public class BeaconController : Controller
{
public ActionResult Index(int? id)
{
if(id!=null)
{
return Content(id.Value.ToString());
}
return Content("Id missing");
}
}
另一个选择是从UseMvc
方法中删除特定路由定义,并使用属性路由指定它。
public class BeaconController : Controller
{
[Route("Beacon/{id?}")]
public ActionResult Index(int? id)
{
if(id!=null)
{
return Content(id.Value.ToString());
}
return Content("Id missing");
}
}
http://www.example.com/beacon
工作的原因是因为该请求结构与为默认路由定义的模式匹配。