2009-05-26 1 views
3

Я хочу создать сайт ASP.NET MVC, чтобы контроллер для определенного URL-адреса хранился в базе данных вместо URL-адреса.URL-адрес маршрутизации с поиском базы данных?

Причина в том, что я строю систему CMS, и пользователи должны иметь возможность изменять шаблон (контроллер) без изменения URL-адреса. Я также думаю, что имя контроллера не относится к конечным пользователям, и я хочу чистый URL: s.

Я понимаю, что я мог просто добавить все маршруты при запуске приложения, но для системы с 100 000 страницами она кажется плохим.

Возможно ли сохранить URL-адрес: s в базе данных и выполнить поиск по каждому запросу, а затем сопоставить этот запрос конкретному контроллеру?

ответ

-1

Я полагаю, что ASP.NET может выполнять многие из тех же функций, что и PHP. Если так, то есть простой подход.

С правилами перезаписи вы можете легко отправить любой трафик на любой URL-адрес 100K в одно и то же место. В этом месте назначения вы можете просто использовать переменные сервера, содержащие URL-адрес, запрошенный клиентом, и извлечь местоположение. Посмотрите его в БД и отправьте соответствующие данные для этого URL-адреса обратно клиенту на лету.

+0

Вам понадобится asp.net mvc url routing для этого, чтобы это работало – jfar

-1

«для системы с 100 000 страниц она кажется плохой идеей».

Плохая идея, если вы создаете систему маршрутизации, которую нельзя использовать повторно. Основная схема {controller}/{action}/{id} указывает вам на повторное использование. Эта схема может быть расширена/обновлена ​​/ воссоздана в соответствии с вашими потребностями.

Вместо того, чтобы думать о том, сколько страниц вы думаете о том, как ваши ресурсы могут быть сгруппированы.

Вместо создания тяжелой системы маршрутизации, почему бы не создать элемент управления привязкой (ascx), который позволяет пользователю добавлять только действующие внутренние ссылки. Сохраните таблицу в db ваших шаблонов и их контроллеров, чтобы заполнить элемент управления им.

1

Почему ты не мог просто сделать что-то вроде этого:

- Global.asax.cs -

routes.MapRoute(null,    // Route name 
       "content/{id}", // URL with parameters    
       new { Controller = "Content", Action = "Show", Id = (string) null }); // Parameter defaults 

-/Контроллеры/ContentController.cs -

public class ContentController : Controller 
{ 
    public ActionResult Show(string id) 
    { 
     // Lookup the 'content' (article, page, blog post, etc) in the repository (database, xml file, etc) 
     ContentRepository repository = new ContentRepository(); 
     Content content = repository.FindContent(id); 
     return View(content); 
    } 
} 

Такое, что запрос на ваш сайт www.yoursite.com/content/welcome-to-my-first-blog-post бы назвал ContentController.Show ("Добро пожаловать к моему -первая-блог-пост ").

+0

Технически это звуковое решение, но не в конце концов оно отправило бы много запросов с помощью этого одного метода. Похоже на анти-шаблон. – kjgilla