控制器的重载索引方法
本文关键字:方法 索引 重载 控制器 | 更新日期: 2023-09-27 18:18:23
目标
重载索引"方法与myapp.com/Category/SomethingHere/
相似
我有CategoryController
与Index()
方法如下:
//
// GET: /Category/
public ActionResult Index(string categoryName)
{
if (categoryName != null)
return View(categoryName);
else
{
return Content("Test");
}
}
并正常工作¹,直到我访问myapp.com/Category/Cars/
或myapp.com/Category/Sports/
。
当我尝试访问这些url时,我收到的响应是:
'/'应用程序出现服务器错误。
无法找到资源。
我已经试过了
At App_Start/RouteConfig.cs
:
routes.MapRoute(
name: "CategoriesMapping",
url: "{controller}/{categoryName}",
defaults:
new { controller = "Categoria", action = "Index",
categoryName = URLParameters.Optional
}
);
但是没有成功和问题是一样的。
考虑我已经尝试过的其他事情:
public ActionResult Index(string? categoryName) { }
和
public ActionResult Index(Nullable<string> categoryName) { }
成功?不。当我使用这个语法
时,Visual Studio返回一个错误类型"string"必须为非空值类型才能将其用作参数"T"在泛型类型或方法"System.Nullable"
¹:"Normally"意思是:如果我访问myapp.com/Category/
, Test
显示给我。
模棱两可的问题吗?
也许。不幸的是,我在Stack上找到的其他答案都不适合我。我已经试过帕特里克的问题,勃艮第爸爸的问题,安迪·埃文斯的问题和其他一些人的问题。
你应该有这样的路由。
routes.MapRoute(
name: "CategoriesMapping",
url: "Category/{categoryName}",
defaults:
new { controller = "Categoria", action = "Index",
categoryName = URLParameters.Optional
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults:
new { controller = "Home", action = "Index",
id = URLParameters.Optional
}
);
注意,约束说第一个片段必须完全是"Category"。这确保默认路由仍然可以处理所有其他请求。你必须保持默认路由,以免破坏其他控制器的约定。还要确保最后映射默认路由