【发布时间】:2019-02-07 07:45:06
【问题描述】:
我已经具备了我认为非常标准的控制器的条件:
这是控制器定义(有点依赖注入,但标准):
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(并且 title 为空)。
如果我在 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 遵循相同的模式。有些工作,有些不工作。
如果我去掉标题参数,它们似乎都可以工作。
我不知道为什么!
【问题讨论】:
-
可以分享路由配置吗?
-
我已经在上面添加了!谢谢。
-
你试过把 [FromRoute] 放在你的参数前面吗?
-
谢谢。 [FromRoute} 没有任何区别。 :(
-
对不起,哪个前导斜线? - 所以它读作 series/{id;int?}/{title?}
标签: asp.net asp.net-mvc asp.net-core routing asp.net-core-2.0