我发现这个网站有很好的网址。但我不知道如何创建这样的路线。我的格式是这样的:
www.domain.com/{country}/{category-name} ---> www.domain.com/japanese/restaurant
www.domain.com/{country}/{restaurant-name} ---> www.domain.com/japanese/the-best-sushi-of -japanese
有什么建议么?
我发现这个网站有很好的网址。但我不知道如何创建这样的路线。我的格式是这样的:
www.domain.com/{country}/{category-name} ---> www.domain.com/japanese/restaurant
www.domain.com/{country}/{restaurant-name} ---> www.domain.com/japanese/the-best-sushi-of -japanese
有什么建议么?
您应该考虑使用http://attributerouting.net/
它可以让你在课堂上做这样的事情:
[RoutePrefix("my")]
public class MyController : ApiController
然后在你的方法上:
[POST("create"), JsonExceptionFilter]
public HttpResponseMessage CreateEntry(Entry entryDc)
所以你的网址是:
http://www.mydomain/my/create
同意 Jammer 的观点,即http://attributeroute.net是要走的路。但是我认为你会追求的是以下......
public class RestaurantController : ApiController
{
[GET("{countryId}/{categoryId}")]
public ActionResult ListRestaurant(string countryId, string categoryId)
{
var restaurants = from r in db.Restaurants
where r.Country.CountryId == country
where r.Category.CategoryId == categoryId
select r;
return View(restaurants);
}
}
但是,您拥有的两条路线是不可能一起工作的。您如何确定“the-best-sushi-of -japanese”是餐厅的类别或名称,而无需先访问数据库。由于路由发生在控制器之前,因此发生在数据库之前,因此您没有执行正确控制器操作所需的信息。
MVC 路由适用于模式匹配,因此您需要两条路由具有不同的 PATTERNS。你可以做到这一点的一种方法是......
public class RestaurantController : ApiController
{
[GET("{countryId}/{categoryId:int}")]
public ActionResult ListRestaurant(string countryId, int categoryId)
{
var restaurants = from r in db.Restaurants
where r.Country.CountryId == country
where r.Category.CategoryId == categoryId
select r;
return View(restaurants);
}
[GET("{countryId}/{restaurantName:string}")]
public ActionResult ListRestaurant(string countryId, string restaurantName)
{
var restaurants = from r in db.Restaurants
where r.Country.CountryId == country
where r.Name == restaurantName
select r;
var restaurant = restaurants.SingleOrDefault();
if(restaurant == null)
return Redirect();///somewhere to tell them there is not restaurant with that name.
return View(restaurants);
}
}
最后虽然。您有什么理由需要带有餐厅名称的国家/地区吗?如果您假设存在多个同名餐厅的可能性,那么肯定更有可能在同一个国家/地区...