我有以下来自 MySQL 表的示例数据。
我的问题是在我的 MVC 4 项目中,我怎样才能让路由正常工作,以便如果用户访问 URL www.mydomain.com/products/apples/ 我希望调用实际上是 www.mydomain.com/ 的视图products/index/1,我该如何实现呢?
我有以下来自 MySQL 表的示例数据。
我的问题是在我的 MVC 4 项目中,我怎样才能让路由正常工作,以便如果用户访问 URL www.mydomain.com/products/apples/ 我希望调用实际上是 www.mydomain.com/ 的视图products/index/1,我该如何实现呢?
您可以创建这条路线:
routes.MapRoute("Product", "products/{productName}",
new {controller = "products", action="index"});
这条路线说:
当请求带有与模式匹配的 URL 时:“products/{productName}”(例如http://www.example.com/products/apple),将其传递给“ProductsController”中的“index”操作处理和传递由 {productName} 占位符指示的 URL 段,作为名为“productName”的参数传递给该操作。
那么你的行动将是:
[HttpGet]
public ActionResult Index(string productName) {
// Lookup product from DB
// do stuff
var viewModel = ...;
return View(viewModel);
}
因此,当对 products/apple 的请求进入时,“apple”作为 productName 参数传递到 Index 操作中。
RouteConfig.cs
在默认路由表达式之前放入以下代码。
foreach (var item in _context.products)
{
routes.MapRoute(
item.Url,
"products/" + item.Url,
new { controller = "products", action = "index", @id = item.ProductId }
);
}
以上_context.products
用于从数据库中检索产品。您可以根据您的模型进行修改。