use*_*088 3 asp.net asp.net-mvc routes asp.net-core asp.net-core-2.0
我有一个非常标准的控制器:
这是控制器定义(一些依赖注入,但标准):
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);
//...
Run Code Online (Sandbox Code Playgroud)
如果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);
Run Code Online (Sandbox Code Playgroud)
那个有效。
这是路由配置(只是标准):
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Run Code Online (Sandbox Code Playgroud)
我一定错过了一些明显的东西,但我很困惑!
任何建议都非常感激。
更新:
我已经剥离了控制器的所有功能。我只是将它传递给一个视图。
这有效: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 也遵循相同的模式。有些工作,有些不工作。
如果我去掉标题参数,它们似乎都可以工作。
我不知道为什么!
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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11148 次 |
最近记录: |