以编程方式在运行时重写映射规则

时间:2009-07-24 15:34:51

标签: c# asp.net rewrite

是否可以为ASP.NET 3.5预先添加静态重写映射规则

我有: -

<rewriteMaps>
    <rewriteMap name="My Name">
        <add key="/Sales" value="/Test.aspx?id=10" />
        <add key="/Sales-And-Marketing" value="/Test.aspx?id=10&amp;dog=cat" />
    </rewriteMap>
</rewriteMaps>

但是想在运行时逐步添加这些吗?

2 个答案:

答案 0 :(得分:1)

我知道它有点晚了,但你可以通过在单独的配置中使用url以编程方式进行

    <rewrite>
  <rewriteMaps  configSource="urls.config" />
  <rules>
    <rule name="Rewrite rule1 for StaticRedirect">
      <match url=".*" />
      <conditions>
        <add input="{StaticRedirect:{REQUEST_URI}}" pattern="(.+)" />
      </conditions>
      <action type="Rewrite" url="{C:1}" appendQueryString="false" />
    </rule>
  </rules>
</rewrite>

然后,当您的网址发生变化时,您需要写入此配置文件,当通过CMS管理系统更改并保存页面时,我会执行此操作,使用Web服务与客户端网站通信并指示其重建文件。

我唯一的问题是这似乎不想在Visual Studio开发Web服务器

中工作

答案 1 :(得分:0)

基本上,您可以在应用程序启动时从一些持久存储(web.config文件,数据库等)加载您在应用程序中创建的一些规则,然后将这些规则保存在内存中。我没有这方面的代码,但我确实有一个代码示例,用于在ASP.NET中从运行时重写URL。查看此链接以获取代码段:

http://www.upfromthesky.com/blog/post/2009/05/04/URL-Rewriting-in-ASPNET-via-HttpModule.aspx

你会注意到我没有很多规则,所以我只是对其中的规则进行了硬编码 - 但是你可以从内存中添加一些内容来加载规则(例如,作为正则表达式)来比较当前的web url请求至。同样,这些也可以存储在xml文件中,这样您就可以在不必每次都重新编译代码的情况下进行更改。