2

一部のURLにはIIS7の「URL書き換え」機能を使用しています

たとえば、書き換えるルール

/viewSompage.aspx?id=123&title=some-title 

に書き換えます

/View/SomePage/some-title/123/

いくつかの目的(そのうちの1つは電子メールテンプレートで書き換えられたURLを設定できるなど)のために、文字列を指定して、コードビハインドで書き換えられたURLを取得する必要があります。

リライターがアウトバウンドルールを使用してページ内のURLを自動的に適用することは知っていますが、他の目的で書き換えられたURLを取得する必要があります。

url文字列を渡して、urlrewiterに該当するルールを指定されたurlの例に適用させたい

String rewrittenURL = ApplyRewritingRules("/viewSompage.aspx?id=123&title=some-title");

前もって感謝します

4

3 に答える 3

4

わかりました、冗長なことをする必要のないまともな解決策を見つけました。

Page.ResolveUrl(Request.RawUrl)

ここで、PageはSystem.Web.UI.Pageのインスタンスです...これは標準のaspxページです

リクエスト...リクエストにアクセスしようとしている場合は、HttpContect.Current.Request..を使用してください。

RawUrl = /viewSompage.aspx?id=123&title=some-title 

に書き換えます(web.configで指定された私のルールに従って)

/View/SomePage/some-title/123/

そこから、たった1行のコードでこのようなリンク全体を構築できます。

String url = String.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host, Page.ResolveUrl(request.RawUrl));
于 2013-03-26T07:49:37.770 に答える
0

カスタムURLリライタクラスを作成し、その構成をSQLテーブル
テーブルUrl_Rulesに保存できます。

  • int id
  • nvarchar(250)オリジナル
  • nvarchar(250)を書き直しました

このテーブルを使用して複数のルールを保存し、global.asaxを使用して、データベースで適切なパスを探すことにより、書き換えルールを実行できます。例:
SELECT original from Url_Rules where rewritten ='http://someurl/article/id'

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    urlEngine.Rewrite(System.Web.HttpContext.Current.Request.RawUrl.ToString)
End Sub

urlEngine.Rewriteは、dbからデータを取得するジョブを実行し、それを現在のコンテキストに適用します。

System.Web.HttpContext.Current.RewritePath(url_from_db)

このようにして、IIS 7 URL Rewriteをアンインストールできます。これは、文字列としてエンコードされたURLだけを返す2番目のメソッドを作成し、それを電子メールで送信するよりも、次のようになります。

public Function GetUrl(ByVal url As String)
       return url_from_db
End Function
于 2013-03-25T23:05:46.663 に答える
-1

これはあまり答えではありませんが、その目的でUrlRewriteを使用するべきではないと思います。コードからは見えないことがサーバー側で発生しているため、コードが読みにくくなります。動的に変更できるかどうかは完全にはわかりません。私の記憶が正しければ、その内容はweb.configにあり、値を変更するにはIISによる再コンパイルが必要です。

于 2013-03-25T22:24:24.300 に答える