public IActionResult Info(int id)
{
return Content(id + "");
}
每当我输入Jan / Info / 2时,浏览器都会返回值0.为什么会这样,我该如何解决?我使用的是MVC核心1.1。 UrlParameter.Optional在Visual Studio中也不存在,因为某些原因它无法访问。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "Naam",
template: "{controller=Jan}/{action}/{voornaam}");
routes.MapRoute(
name: "Info",
template: "{controller=Jan}/{action}/{id}");
}
public IActionResult Naam(string voornaam)
{
return Content(voornaam);
}
答案 0 :(得分:0)
因为您已经有另一个与确切模式匹配的路径注册。根据该注册,它将读取值并分配给voornaam
参数。
所以这应该有用
public IActionResult Info(int voornaam)
{
return Content(voornaam + "");
}
由于您的操作方法具有唯一的名称,因此您无需为每个操作方法指定自定义路径。默认路由注册将正常工作。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "defaultroutes",
template: "{controller}/{action=Index}/{id?}",
defaults: new { controller = "jan" });
});
假设您的控制器看起来像这样
public class JanController : Controller
{
public IActionResult Info(int id)
{
return Content(id + " : id");
}
public IActionResult Naam(string voornaam)
{
return Content(voornaam+ ": param value");
}
}
当您访问yourSite/jan/info/123
时,Info
方法将处理该问题,当您请求yourSite/jan/Naam?voornaam=shyju
时,Naam方法将处理该问题。
如果要支持yourSite/jan/Naam/shyju
之类的网址结构而不是显式查询字符串,可以使用属性路由指定该操作方法的路由模式
public class JanController : Controller
{
public IActionResult Info(int id)
{
return Content(id + " id");
}
[Route("[controller]/[action]/{voornaam}")]
public IActionResult Naam(string voornaam)
{
return Content(voornaam + " : param value");
}
}
现在,当您请求yourSite/jan/Naam/shyju
时,将调用Naam方法并且字符串" shyju"将在voornaam
参数