Asp MVC маршрутизация на клиента - PullRequest
3 голосов
/ 30 ноября 2011

У меня есть проект в 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();
    }
}

Спасибо ..

Ответы [ 3 ]

1 голос
/ 30 ноября 2011

Создайте класс 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(); 
    } 
} 
0 голосов
/ 30 ноября 2011

Вы можете сделать что-то вроде:

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 для редактирования клиента.Потому что вам нужен какой-то уникальный элемент пути, чтобы отличаться от всех других маршрутизаторов.

Надеюсь, это поможет вам

0 голосов
/ 30 ноября 2011

Это, вероятно, что должно быть привязано к модели , или даже лучше, вы должны поместить ActionFilter на свой контроллер, чтобы убедиться, что клиенты из одной компании не попадают в клиент из другой компании.

Не зная больше о вашей проблеме (например, какую информацию имеет каждый клиент, и если она хранится в системе членства ASP.NET или в какой-либо другой системе, было бы сложнее сказать вам, что вам действительно нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...