我在MVC 3中有一个项目,我想为每个客户提供一个特定的URL。
样品:
www.mysite.com/CustomerOne
www.mysite.com/CustomerTwo
我已经注册了所有路线并且效果很好。
问题是:我必须在所有操作中期望客户名称的第一个参数。
我喜欢类似的东西,在自定义控制器上有一个属性,告诉我客户在哪里。
代码:
routes.MapRoute(
"PerCustomer", // Route name
"{customer}/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", customer = UrlParameter.Optional, id = UrlParameter.Optional } // Parameter defaults
);
public class HomeController : Controller
{
public ActionResult Index(string customer)
{
//do stuff
return View();
}
public ActionResult SaveSomething(string customer, string param1, ...)
{
//save stuff for the customer
return View();
}
}
谢谢..
答案 0 :(得分:1)
像这样创建一个BaseControoler类:
public class BaseController : Controller
{
public string CurrentCustomer
{
get
{
return (string)RouteData.Values["customer"];
}
}
}
并在您的控制器中:
public class HomeController : BaseController
{
public ActionResult Index()
{
//do stuff
DoSomethinwWith(this.CurrentCustomer);
return View();
}
public ActionResult SaveSomething(string param1, ...)
{
DoSomethinwWith(this.CurrentCustomer);
return View();
}
}
答案 1 :(得分:0)
这可能是should be modelbound,甚至更好,你应该在你的控制器上放置一个ActionFilter,以确保来自一家公司的客户不会从另一家公司的客户那里接收客户。
在不了解您的问题的情况下(例如,每个客户拥有哪些信息,如果这些信息保存在ASP.NET成员资格系统或其他系统中,那么告诉您实际需要的内容会更加困难。) p>
答案 2 :(得分:0)
您可以执行以下操作:
routes.MapRoute( "PerCustomer", // Route name "/Profile/{customer}/{action}", // URL with parameters new { controller = "Customer", action = "Index", customer = UrlParameter.Optional, action = UrlParameter.Optional } // Parameter defaults );
这将允许您为查看模式执行/ profile / Customer1和/ profile / customer1 / edit以编辑客户。因为你需要某种独特的路径元素来明确地识别所有其他路由器。
我希望这会对你有所帮助