我从MySQL表中有以下示例数据。从MySQL数据库MV4路由动态路由
我的问题是在我的MVC 4项目,我怎么能得到路由工作,这样,如果一个用户进入www.mydomain.com/products/apples/我想调用实际上是URL www.mydomain.com/products/index/1的观点,我如何实现这一目标?
我从MySQL表中有以下示例数据。从MySQL数据库MV4路由动态路由
我的问题是在我的MVC 4项目,我怎么能得到路由工作,这样,如果一个用户进入www.mydomain.com/products/apples/我想调用实际上是URL www.mydomain.com/products/index/1的观点,我如何实现这一目标?
您可以创建这样一个路径:
routes.MapRoute("Product", "products/{productName}",
new {controller = "products", action="index"});
这条路线是说:
当一个请求与匹配模式的网址进来:“产品/ {产品名称}”(例如: 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);
}
所以,当收到请求时对产品/苹果,“苹果”被传递到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
用于从数据库中检索产品。您可以根据您的模型进行修改。
RouteConfig.cs中的代码何时执行?应用程序(IIS)何时启动或何时请求URL?此外,这个应用程序将有10万个产品的区域,所以会有这样的性能问题。 – Tommassiov
此代码将在应用程序启动时运行。所以如果你有这么多的记录,它会在第一时间运行缓慢,但之后不需要时间。如果你不想要这个,你可以使用路由约束。 –
处理这么多URL的推荐方式是什么?另外,如果在应用程序(IIS)启动后添加或更改URL,那又如何呢? – Tommassiov
您是否可以扩大答案的范围,因为我是MVC的新手,并努力实现这一目标。 – Tommassiov