我已经拥有了一个非常标准的控制器:
这是控制器定义(一点依赖注入,但标准):
public class SeriesController : Controller
{
private readonly IHostingEnvironment _env;
public SeriesController(IHostingEnvironment env)
{
_env = env;
}
[HttpGet("/series/{id:int?}/{title?}")]
public IActionResult Index(int id, string title)
{
if (id > 0)
{
var populateSeriesItem = new PopulateSeriesItem(_env, new SqlConnection());
var seriesItem = populateSeriesItem.GenerateSeriesItem(id);
//...
如果id不存在(或0),则显示所有记录;如果它是1或更大,它会显示一条记录。 (这是客户想要的!)
我称之为:
https://localhost/series/3/title
要么
但问题是id始终为0(并且标题为null)。
如果我在URL栏中输入或手动指定id(即/ series?id = 3)就是这种情况
我只是无法弄清楚我错过了什么。
完全相同的设置与不同的控制器完美配合。
[HttpGet("/books/{id:int?}/{title?}")]
public ActionResult Index(int id, string title)
{
if (id > 0)
{
var populateBookItem = new PopulateBookItem(new SqlConnection(), _env);
var bookItem = populateBookItem.GenerateBookItem(id);
那一个有效。
这是路由配置(仅标准):
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
我一定错过了一些明显的东西,但我很困惑!
任何建议都非常感谢。
更新:
我已经从控制器中删除了所有功能。我只是将它传递给视图。
这有效:https://localhost:44319/series/14/megacities - 视图报告id = 14。
这有效:https://localhost:44319/series/5/megacities - 视图报告id = 5
这有效:https://localhost:44319/series/14/business-with-china - 视图报告id = 14。
这不起作用:https://localhost:44319/series/5/business-with-china - 它去https://localhost:44319/series/0。
还有其他URL遵循相同的模式。有些工作,有些不工作。
如果我删除title参数,它们似乎都可以工作。
我不明白为什么!
routes.MapRoute
,它不是Web API所必需的。[HttpGet("/books/{id:int?}")]
api/books/5?title=abc
[HttpGet("/books/{id:int?}")]
public ActionResult Index(int id, [FromQuery] string title)
{
//code here
}
谢谢大家的帮助。
我已经解决了这个问题,虽然我不知道是什么导致了它。 (我认为这可能是浏览器缓存问题。)
无论如何,我重新启动了服务器,现在一切正常。
如果名称不匹配,则参数将解析为默认值 - 如果是数字则为0,否则为null在下面的示例中,url具有param1,而方法的参数名称为param2。
[HttpGet("/foo/{param1}")]
public ActionResult Foo(int param2)
{
//code here
}