Я хочу, чтобы URL-адрес из базы данных, как динамически. Для примера: у меня есть,Как динамическое сопоставление url в asp.net с C#?
и я хочу,
Я хочу, чтобы URL-адрес из базы данных, как динамически. Для примера: у меня есть,Как динамическое сопоставление url в asp.net с C#?
и я хочу,
Это решение является довольно интенсивным, но действительный один все-таки ,
У нас была такая же проблема в моей работе несколько лет назад (до того, как мы перешли на ASP.NET MVC, который я настоятельно рекомендую).
Во-первых, мы создали новый модуль ASP.NET (и зарегистрировали его в IIS или Web.config). Этот модуль получит запросы входящего клиента.
Мы построили наши собственные HttpModule
и заставили его работать вдоль файла конфигурации, где мы определили наши действительные маршруты, в вашем случае http://www.example.com/Men/
.
У нас был бы список руководители. Эти менеджеры будут работать как конвейер. Каждый менеджер получит результат предыдущего.
Следуя этому подходу, наш первый менеджер был наш RewriteManager
, который обработал переписывание URL входящего запроса, так что будущие менеджеры (и унаследованные из них) могли бы продолжать с помощью нашего Aspx URL.
Вот пример одного нашего маршрута в конфигурационном файле нашего модуля:
<configuration name="note"
mode="1"
urlPattern="^https?://(([a-z0-9\-]*\.)?localhost(:[0-9]+)?/((?'note_id'[0-9]+)-?(?'title'.*))$"
rewriteUrl="/note.aspx?note_id={note_id}&site={ContextInfo.site}">
<manager type="LaNacion.Framework.Web.Managers.RewriteManager, LaNacion.Framework.Web.Managers"/>
<!-- THESE MANAGERS NEED THE ASPX URL, THEY ARE LEGACY MANAGERS -->
<manager type="LaNacion.Framework.Web.Managers.FileCacheManager, LaNacion.Framework.Web.Managers"/>
<manager type="LaNacion.Hola.Web.Managers.NotaManager, LaNacion.Hola.Web.Managers"/>
<manager type="LaNacion.Framework.Web.Managers.OutputImageCacheManager, LaNacion.Framework.Web.Managers"/>
</configuration>
Как вы можете видеть, мы определяем наш маршрут в регулярном выражении и вспомнить необходимую информацию с помощью именованных групп по регулярному выражению. Позже мы построим наш устаревший URL, используя эту информацию, которую мы вспомнили.
В вас случае атрибут urlPattern
будет выглядеть следующим образом:
https?://(([a-z0-9\-]*\.)?localhost(:[0-9]+)?/(?'entity'[a-zA-Z]+)
И атрибут rewriteUrl
wourld быть:
/Category.aspx?cid=c001&cname={entity}
Мы делаем переписывания URL, используя RewritePath
метод из HttpContext
пример:
System.Web.HttpContext.Current.RewritePath(newUrl);
Будущие менеджеры затем смогут извлекать параметры запроса, как они всегда делали, что делает устаревшие менеджеры такими же, как и раньше.
Надеюсь, я сделал себе достаточно ясно, и это помогло вам.
Решение, описанное выше, Мати-Цицеро хорошо работает, если вы уже знаете свои правила перезаписи. Если вы хотите пойти этим путем, я бы также предложил статью в http://weblogs.asp.net/scottgu/tip-trick-url-rewriting-with-asp-net (старый, но хороший).
Но если вы хотите, чтобы переписать URL-адресов, хранящихся в базе данных, это то, что я предлагаю:
Создать HttpModule таким образом:
public class DBRewriteModule : IHttpModule
{
public DBRewriteModule()
{
}
public void Init(HttpApplication context)
{
context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);
}
void context_AuthorizeRequest(object sender, EventArgs e)
{
Rewriter rw = new Rewriter();
rw.Process();
}
}
Добавить его в свой файл web.config
так:
<system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true"> <add name="DBRewrite" type="smartdev.web.Modules.DBRewriteModule" /> </modules> </system.webServer>
И в вашем Rewriter CS файл, который вы должны ч ave что-то похожее на:
public class Rewriter
{
public Rewriter()
{
}
public bool Process()
{
// get path from database based on your original path:
// use HttpContext.Current.Request.Path and HttpContext.Current.Request.QueryString
string substPath = "...your db logic here ...";
HttpContext.Current.RewritePath(substPath);
}
}
Рассматривали ли вы переход к структуре ASP.NET MVC? –
NO. Я использую asp.net 3.5 framework – Boktiar