ASP.NETの非表示の機能[終了]


292

この質問は歴史的に重要であるために存在しますが、このサイトではトピックに適した質問とは見なされないため、ここで同様の質問をすることができるという証拠として使用しないでください。

詳細:https : //stackoverflow.com/faq


フリンジシナリオで役立つ機能は常に存在しますが、そのため、ほとんどの人はそれらを知りません。教科書では通常教えられない機能を求めています。

あなたが知っているものは何ですか?


良い質問です。複数回投票したいと思います。
Gavin Miller

1
同意した。私はこのようなスレッドが大好きです。フレームワークには非常に深みがあるため、そこにあるとは知らなかったことに時々驚かされます。
ディーン

私はこのスレッドの応答から多くのクールな新しいトリックを学んでいます-ありがとう!:)
Maxim Zaslavsky、

16
ほとんどの回答は、MSDNまたは他の場所で十分に文書化されており、一般的に知られていないか、使用されていないためです。
ジョンK

妥当性とクローズに関する議論については、meta.stackexchange.com /questions / 56669 /…meta.stackexchange.com /questions/57226 / 、および関連するメタ投稿を参照してください。

回答:


335

テスト中は、SMTPサーバーではなく、コンピューター上のフォルダーにメールを送信できます。これをあなたのweb.configに入れてください:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="SpecifiedPickupDirectory">
            <specifiedPickupDirectory pickupDirectoryLocation="c:\Temp\" />
        </smtp>
    </mailSettings>
</system.net>

6
本当に?Dumbsterのような偽のSMTPサーバーをインストールしようとしていました。宝石を隠しました。
Eduardo Molteni、2008

2
ディレクトリの場所にUNC共有を指定できるかどうか誰かが知っていますか?
マークシェレッタ2009年

32
さらに、作成したすべてのアプリでweb.configを変更する必要がないように、これを開発ボックスmachine.configに配置します。
Max Toro

ローカルホストでのみこれを行うように設定できますか?そうすれば、毎回変更する必要はありませんか?
chobo2 2009

そのための設定はありません。他の方法(Webデプロイメントプロジェクト、ビルドタスクなど)を使用して構成の違いを管理する必要があります
John Sheehan

210

app_offline.htmという名前のファイルを Webアプリケーションディレクトリのルートに配置すると、ASP.NET 2.0+はアプリケーションをシャットダウンし、そのアプリケーションの新しい着信要求の通常の処理を停止し、app_offline.htmのコンテンツのみを表示します。すべての新しいリクエストのファイル。

これは、変更を本番サーバーに再デプロイ(またはロールバック)するときに「サイトが一時的に使用不可」の通知を表示する最も簡単な方法です。

また、marxidadによって指摘されているように、IE6が正しくレンダリングできるように、ファイル内に少なくとも512バイトのコンテンツがあることを確認してください。


10
IEの「フレンドリーな」メッセージの回避策を忘れないでください:tinyurl.com/app-offline-friendly
Mark Cidade

1
痛い!これをMOSS 2007で使用するときは注意してください。これは、IISを最後に再起動してからアクセスされたページでのみ機能します。あなたは以前にアクセスされていないページを開こうとした後、あなたのWSS仮想ルートにこのページを追加するのであれば、あなたは404を取得します
マルク・

1
@Marc-スコットガスリーからこのヒントを受け取りました。寛大であると感じている場合、Guの記事にコメントすると、多くのSharePoint 開発者が
Troy DeMonbreun

さらに、これにより、すべてのリクエストが完了した後、アプリドメインのリサイクルがトリガーされ、開いているデータベース接続がすべて閉じられます。
Bart Verkoeijen

これには注意が必要です。IISはHTTPステータスコード404のapp_offline.htmコンテンツを返します。このオフラインモードのときに検索エンジンがさまよってサイトにインデックスを付けようとすると、結果に満足できない場合があります。しかし、それは私のプライベートな企業向けWebアプリには最適です。
ラリーシルバーマン

119
throw new HttpException(404, "Article not found");

これは、customErrorsページを返すASP.NETによってキャッチされます。最近の.NET Tip of the Day Postでこれについて学びました


一部の開発者は、.NETブックでは非常にコストのかかる例外をスローするよりも、HttpContext.Responseで手動でラップする方がよいと主張することができます。
lubos hasko 2008

この悪い形ではないですか?エラー/例外を表示したいのに、404エラーが表示されています。
ドニートーマス

1
私が考えることができる1つのケースは、誰かが悪意を持ってパラメータをいじって何か無効なものを入れた場合、おそらく特定のエラーではなく一般的な404が必要になるでしょう。
John Sheehan、

3
.NET Tip of the Dayサイトを知ったので、純粋に賛成。
Kon

httpModuleまたはhttpHandlerでスローした場合にのみ機能します
Khaled Musaied

75

これが一番いいです。これをweb.configに追加して、コンパイルを大幅に高速化します。これは、このQFE経由の3.5SP1以降です。

<compilation optimizeCompilations="true">

概要:いくつかのシナリオでコンパイル速度を大幅に向上させることができるASP.NETの新しいoptimizeCompilationsスイッチを導入します。いくつかの落とし穴がありますので、詳細を読んでください。このスイッチは現在3.5SP1のQFEとして利用可能で、VS 2010の一部になります。

ASP.NETコンパイルシステムは非常に保守的なアプローチを採用しているため、「トップレベル」のファイルが変更されるたびに以前に行った作業はすべて消去されます。「トップレベル」のファイルには、binとApp_Code、global.asaxのすべてが含まれます。これは小さなアプリでは問題なく機能しますが、非常に大きなアプリではほとんど使用できなくなります。たとえば、「bin」アセンブリに変更を加えた後、ページを更新するのに10分かかるケースが発生していました。

苦痛を和らげるために、再コンパイルにそれほど慎重ではないアプローチを取る「最適化された」コンパイルモードを追加しました。

ここ経由:


6
これはVS 2010で「デフォルトでオン」ですか、それともまだ試す必要がありますか?
M4N 2011

73
  • HttpContext.Currentは、ページのプロパティにアクセスできない場合(疎結合ヘルパークラスなど)でも、常に現在のコンテキストの要求/応答などにアクセスできます。

  • Response.Redirect(url false )を呼び出して、ユーザーを別のページにリダイレクトした後、同じページでコードの実行を続けることができます。

  • コンパイルしたページ(またはIHttpHandler)だけが必要な場合は、.ASPXファイルは必要ありません。パスとHTTPメソッドを設定して、web.configファイルの要素のクラスを指すだけです。<httpHandlers>

  • A ページ・オブジェクトから取得することができるの.aspx呼び出すことにより、プログラムファイルPageParser.GetCompiledPageInstance(virtualPath、aspxFileName、コンテキスト)


Response.Redirect(url、false)について-それは私が長い間望んでいたことです。私はどうやってそれを逃したのかわかりませんが、xxxを超えています
Subliminal Hash

1
誰かがこれで何をするか説明できますか?価値があることはわかっていますが、理由がわかりません...
Deane

5
ユーザーを別のアドレスにリダイレクトしたいが、まだバックエンド処理が必要な場合(たとえば、バックグラウンドでレポートの生成を続行しながらレポートの生成ステータスページにリダイレクトするレポート生成要求)
Mark Cidade

誰かがPageParser.GetCompiledPageInstance(..)の有用な状況を説明できますか?ドキュメントは、それがインフラストラクチャの使用のためであると言います-それはIHttpHandler型を返すので、それが実際にどのように使用されることができるかわかりません。
John K

@jdk:* .aspxリクエストのデフォルトハンドラーをオーバーライドするときに過去に使用したため、動的なインメモリIHttpHandlerオブジェクトを使用できますが、物理的な* .aspxファイルにはGetCompiledPageInstance()も使用できます。
Mark Cidade、2010年

70

machine.configレベルのリテールモード:

<configuration>
  <system.web>
    <deployment retail="true"/>
  </system.web>
</configuration>

web.config設定をオーバーライドして、デバッグをfalseに強制し、カスタムエラーをオンにして、トレースを無効にします。公開する前に属性を変更することを忘れないでください。それらすべてを開発またはテスト環境用に構成したままにして、製品の小売設定を更新してください。


1
パブリッシュする前にコンパイルデバッグをfalseに変更することを忘れることがあります。これはパフォーマンスに悪影響を及ぼします。もう問題ありません!
Roy Tinker

59

コンテンツページでMasterPagesのインテリセンスを有効にする
これはほとんど知られていないハックだと思います

ほとんどの場合、findcontrolメソッドを使用し、使用するときにコンテンツページからマスターページのコントロールをキャストする必要があります。これを行うと、MasterType ディレクティブによってVisual Studioでインテリセンスが有効になります

ページにもう1つのディレクティブを追加するだけです

<%@ MasterType VirtualPath="~/Masters/MyMainMasterPage.master" %>

仮想パスを使用せず、代わりにクラス名を使用する場合

<%@ MasterType TypeName="MyMainMasterPage" %>

記事全文はこちら


この素晴らしいヒントをありがとう、FindControlの使用は多忙になる場合があります。
アレクサンドルブリセボワ

4
これを使用すると、予期しない動作が発生する可能性があります。stackoverflow.com/questions/1998931/…を
citronas

個人的には、機能は人に知られていないはずだと思います、それはページをマスターページに結び付けます。最終的にマスターページのプロパティ/メソッドを使用してマスターページを変更すると、メンテナンスの悪夢に終わります。
Phill、

@Phil:場合によっては必要であり、静的に型指定されたマスターページへのアクセスを持つことは、FindControlアプローチよりもはるかに優れています。少なくとも、コンパイラメッセージが表示され、すばやく修正できます。
Durden81、2011年

58

要求レベルのキャッシュツールとしてのHttpContext.Items


2
これも私のポイントになります。これをネストされたコントロールで使用して、要求レベルの情報を渡します。IiはMVCでもこれを使用して、部分ビューに基づいて追加するjsファイルのリストを格納します。
Tracker1

1
これは、asp.netルーティングを使用して、URLから取得したパラメーターをページに渡すときに使用します。(MVCではなく)URLの書き換えに最適で、非常に柔軟です。
Alexandre Brisebois

うーん、Sessionの代わりにこれを使用できる場所を考えました-ta!
マイクキングスコット

52

私の頭の中で2つのことが際立っています。

1)コードからトレースをオンまたはオフにできます。

#ifdef DEBUG 
   if (Context.Request.QueryString["DoTrace"] == "true")
                {
                    Trace.IsEnabled = true;
                    Trace.Write("Application:TraceStarted");
                }
#endif

2)1つの共有「分離コード」ファイルのみを使用して、複数の.aspxページを構築できます。

1つのクラス.csファイルを作成します。

public class Class1:System.Web.UI.Page
    {
        public TextBox tbLogin;

        protected void Page_Load(object sender, EventArgs e)
        {

          if (tbLogin!=null)
            tbLogin.Text = "Hello World";
        }
    }

そして、任意の数の.aspxページを持つことができます(VSが生成した.designer.csおよび.csコードビハインドを削除した後):

  <%@ Page Language="C#"  AutoEventWireup="true"  Inherits="Namespace.Class1" %>
     <form id="form1" runat="server">
     <div>
     <asp:TextBox  ID="tbLogin" runat="server"></asp: TextBox  >
     </div>
     </form>

ASPXにClass1に表示されない、またはその逆のコントロールを含めることができますが、コントロールのnullをチェックすることを覚えておく必要があります。


私はこれに賛成票を投じたでしょうが、票を使い果たしました。私はこれに投票するために戻って来ることを試み、覚えているつもりです。複数のページで同じ分離コードファイルを使用できることを知りませんでした。よくわかりません。
Vaibhav

5
他の誰かがあなたがURLからのトレースをアクティブにできるようにするのはセキュリティリスクだと思いますか?(#1)この質問には反対票を投じませんが、そこでのリスクを理解することが重要です。
ケビン・ゴフ

5
絶対に、そのコードを#ifdef DEBUG #endifブロックに
配置する

セキュリティの側面を指摘する素晴らしいコメント。
Vaibhav

2
urlからのトレースをアクティブにすることがセキュリティリスクになるのはなぜですか?どのように私を傷つけるのに使用できますか?
カマレイ

48

以下を使用できます。

 Request.Params[Control.UniqueId] 

コントロールの値を取得する前に、ビューステートが初期化されます(この時点では、Control.Textなどは空になります)。

これはInitのコードに役立ちます。


ビューステートの初期化では、Request.Paramsは処理されません。IPostBackDataHandlerを実装したコントロールのメソッドLoadPostDataを発生させる前に使用してください。
chapluck 2010

46

WebMethods。

ASPXページに配置されたWebメソッドへのASP.NET AJAXコールバックを使用できます。[WebMethod()]および[ScriptMethod()]属性を使用して静的メソッドを装飾できます。例えば:

[System.Web.Services.WebMethod()] 
[System.Web.Script.Services.ScriptMethod()] 
public static List<string> GetFruitBeginingWith(string letter)
{
    List<string> products = new List<string>() 
    { 
        "Apple", "Banana", "Blackberry", "Blueberries", "Orange", "Mango", "Melon", "Peach"
    };

    return products.Where(p => p.StartsWith(letter)).ToList();
}

ASPXページでこれを行うことができます:

<form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
        <input type="button" value="Get Fruit" onclick="GetFruit('B')" />
    </div>
</form>

そして、JavaScriptを使用してサーバーサイドメソッドを呼び出します:

    <script type="text/javascript">
    function GetFruit(l)
    {
        PageMethods.GetFruitBeginingWith(l, OnGetFruitComplete);
    }

    function OnGetFruitComplete(result)
    {
        alert("You got fruit: " + result);
    }
</script>

45

長時間実行タスクを開始する前に、クライアントがまだ接続されているかどうかを確認してください。

if (this.Response.IsClientConnected)
{
  // long-running task
}

44

ASP.NETのほとんど知られておらず、めったに使用されない機能は次のとおりです。

タグマッピング

特定の状況で必要になる場合があるため、使用されることはほとんどありませんが、必要な場合には非常に便利です。

この少し知っている機能に関するいくつかの記事:

ASP.NET 2.0のタグマッピングを使用したASP.NETの
タグマッピング

そしてその最後の記事から:

タグマッピングにより、Webアプリケーションのすべてのページでコンパイル時に互換性のあるコントロールを交換できます。便利な例は、DropDownListなどの標準のASP.NETコントロールがあり、それをDropDownListから派生したカスタマイズされたコントロールに置き換える場合です。これは、ルックアップデータのキャッシュをより最適化するためにカスタマイズされたコントロールである可能性があります。すべてのWebフォームを編集して、組み込みのDropDownListsをカスタムバージョンで置き換える代わりに、web.configを変更することにより、ASP.NETで効果的に行うことができます。

<pages>
 <tagMapping>
   <clear />
   <add tagType="System.Web.UI.WebControls.DropDownList"
        mappedTagType="SmartDropDown"/>
  </tagMapping>
</pages>

これは、チームの他の開発者にとって非常に混乱するでしょう
AykutAkıncı

1
@Aykut-確かに可能性があります。そのため、その有用性はかなり狭いと私は述べていますが、必要な場合には非常に便利です。また、混乱や曖昧さを回避するために、タグマッピングの使用法が非常に明確に文書化されていることを確認します。
CraigTP、2011年

43

HttpModules。アーキテクチャは非常にエレガントです。多分隠された機能ではありませんが、それでもなおクールです。


3
HttpModulesは高度なものですが、私はそれをめったに使用しない、またはあまり使用しない(または私を単純と呼ぶ)ことはしません。しかし、はい、私はアーキテクチャが大好きです。
ヴァイバブ

+1は、熟練した開発者の多くがHttpModuleについて知っているが、リクエストとの関係を完全には理解していないためです。(HttpHandlersと同じ)
John Bubriski

34

.aspxページ内でASP.NETコメントを使用して、サーバーコントロールを含むページのすべての部分をコメント化できます。また、コメントアウトされたコンテンツがクライアントに送信されることはありません。

<%--
    <div>
        <asp:Button runat="server" id="btnOne"/>
    </div>
--%>

5
コメントがあることを本当に知らない人がいますか?
ジョーフィリップス

7
<!-コメントにaspxページの半分を見つけたとき、私はそれが好きです...
ブライアンレーベイン09/12/06

これはASP.NETのやや裸の機能です
rafek

34

コード式ビルダー

マークアップの例:

Text = '<%$ Code: GetText() %>'
Text = '<%$ Code: MyStaticClass.MyStaticProperty %>'
Text = '<%$ Code: DateTime.Now.ToShortDateString() %>'
MaxLenth = '<%$ Code: 30 + 40 %>'

コード式ビルダーの本当の美しさは、非データバインディングの状況で式のようなデータバインディングを使用できることです。他の機能を実行する他の式ビルダーを作成することもできます。

web.config:

<system.web>    
    <compilation debug="true">
        <expressionBuilders>
            <add expressionPrefix="Code" type="CodeExpressionBuilder" />

すべてを実現するcsクラス:

[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
    public override CodeExpression GetCodeExpression(
        BoundPropertyEntry entry,
        object parsedData,
        ExpressionBuilderContext context)
    {            
        return new CodeSnippetExpression(entry.Expression);
    }
} 

1
タイトルの「その他」とはどういう意味ですか?
Khaled Musaied 2009年

まあ、私は他の人にたどり着いたことがないと思います。
andleer 2009年

2
+1、本当にクールな機能...これは実際にはWPFのマークアップ拡張機能と非常によく似ています
Thomas Levesque '15年

これは使用と同じではありません<%= /*code*/ %>か?
bevacqua

33

ASHXファイルタイプの使用法:
ページイベントハンドラーを経由せずに基本的なhtmlまたはxmlを出力する場合は、HttpModuleを簡単な方法で実装できます。

ページにSomeHandlerPage.ashxという名前を付け、以下のコード(1行だけ)を挿入します

<%@ webhandler language="C#" class="MyNamespace.MyHandler" %>

次にコードファイル

using System;
using System.IO;
using System.Web;

namespace MyNamespace
{
    public class MyHandler: IHttpHandler
    {
        public void ProcessRequest (HttpContext context)
        {   
            context.Response.ContentType = "text/xml";
            string myString = SomeLibrary.SomeClass.SomeMethod();
            context.Response.Write(myString);
        }

        public bool IsReusable
        {
            get { return true; }
        }
    }
}

5
必要な場合はIRequiresSessionStateまたはIReadOnlySessionStateを追加する必要があることに注意してください。そうでない場合は追加されません。
Tracker1

3
ハンドラーの設定をweb.configで指定できるため、物理的なashxファイルを配置する必要がないことにも注意してください。または、アプリケーションでハンドラーをプログラムで登録して、グローバルasaxで開始することもできます。
フィル

27

ターゲットブラウザにサーバーコントロールのプロパティベースの設定より

<asp:Label runat="server" ID="labelText" 
    ie:Text="This is IE text" 
    mozilla:Text="This is Firefox text" 
    Text="This is general text" 
/>

あれはちょっと驚いた。


1
+1。短いコードのサンプルをインラインで投稿できますか。私はそれがより多くの注目と賛成票を生み出すと思います。これを上げて欲しい。
John K


26

大手のセキュリティ会社によるセキュリティ監査を受けたasp.netアプリケーションに取り組み、あまり知られていないが重要なセキュリティの脆弱性を防ぐための簡単なトリックを学びました。

以下の説明は、次のとおりです

Page.ViewStateUserKeyを使用してワンクリック攻撃に対抗することを検討してください。呼び出し元を認証し、ViewStateを使用する場合は、Page_InitイベントハンドラーでPage.ViewStateUserKeyプロパティを設定して、ワンクリック攻撃を防止します。

void Page_Init (object sender, EventArgs e) {
  ViewStateUserKey = Session.SessionID;
}

プロパティを、セッションID、ユーザー名、ユーザー識別子など、各ユーザーに固有であることがわかっている値に設定します。

ワンクリック攻撃は、攻撃者が、既にViewStateデータが入力されている__VIEWSTATEという名前の非表示フォームフィールドを含むWebページ(.htmまたは.aspx)を作成すると発生します。ViewStateは、100アイテムのショッピングカートページなど、攻撃者が以前に作成したページから生成できます。攻撃者は、疑いを持たないユーザーをそのページの閲覧に誘い、ViewStateが有効なサーバーにページを送信させます。サーバーは、ViewStateが攻撃者から発信されたことを知る方法がありません。ViewStateは有効であり、ページはユーザーのセキュリティコンテキストで実行されるため、ViewState検証とHMACはこの攻撃に対抗しません。

ViewStateUserKeyプロパティを設定することにより、攻撃者がページを参照してViewStateを作成すると、プロパティは自分の名前に初期化されます。正当なユーザーがページをサーバーに送信すると、攻撃者の名前で初期化されます。その結果、ViewState HMACチェックが失敗し、例外が生成されます。


2
また、base.OnInit(e);を残すことを忘れないでください。Page_Init()関数がその役割を果たします。
ドルイド

実際のユーザーがCookieを受け入れなかった場合、またはセッションIDがタイムアウトになった場合、このトリックは失敗する可能性があると思います。
アリストス2010

1
ページにbase.OnInit(e);使用AutoEventWireup="true"している場合は必要ありません。
Adam Nofsinger

1
ドルイド:彼はOnInitをオーバーライドしていません(その場合、base.OnInit(e)が必要になります)。
crdx '15

ViewStateUserKeyのセッションIDの使用は、セッションが実際に開始された後にのみ機能します。また、セッションの有効期限が切れた後にこれらのページがタイムアウトする可能性もあります。これらの問題が懸念される場合は、ユーザーのIPアドレスなど、より耐久性のあるものを使用することを検討してください。
RickNZ


20

ASP.NET 3.5 SP1に含まれています:

  • customErrorsが、「ResponseRewrite」の値を持つ「redirectMode」属性をサポートするようになりました。URLを変更せずにエラーページを表示します。
  • formタグはaction属性を認識します。URL書き換えを使用している場合に最適

20

パネルのDefaultButtonプロパティ。

特定のパネルのデフォルトボタンを設定します。


1
注意、LinkBut​​tonsなど、すべての種類のボタンでは機能しません。
Kovu


19

configSourceを使用して構成ファイルを分割します。

たとえば、次の代わりに、web.configファイルのconfigSource属性を使用して、構成要素を他の.configファイルにプッシュできます。

    <appSettings>
        <add key="webServiceURL" value="https://some/ws.url" />
        <!-- some more keys -->
    </appSettings>

... appSettingsセクション全体を別の構成ファイルに保存できます。ここに新しいweb.configです:

    <appSettings configSource="myAppSettings.config" />

myAppSettings.configファイル:

    <appSettings>        
        <add key="webServiceURL" value="https://some/ws.url" />
        <!-- some more keys -->
    </appSettings>

これは、アプリケーションを顧客にデプロイし、web.configファイル自体に干渉したくない場合や、いくつかの設定のみを変更できるようにする場合に非常に役立ちます。

参照:http : //weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx


1
これは、デスクトップアプリなど、あらゆるタイプの.netプロジェクトでも機能します。構成
Zoltan Veres



16

デフォルトでは、カスタムコントロールのタグ間のコンテンツはすべて子コントロールとして追加されます。これは、フィルタリングまたは追加の解析(例:LiteralControlsのテキストコンテンツ)のAddParsedSubObject()オーバーライドでインターセプトできます。

    protected override void AddParsedSubObject(object obj)
     { var literal = obj as LiteralControl;
       if (literal != null) Controls.Add(parseControl(literal.Text));
       else base.AddParsedSubObject(obj);
     }

...

   <uc:MyControl runat='server'>
     ...this text is parsed as a LiteralControl...
  </uc:MyControl>

13

ASP.NETがRSSフィードを生成している場合、ページの上部に1行追加されることがあります。これは一般的なRSSバリデーターでは検証されません。ページ<@Page>の下部にpageディレクティブを配置することで、この問題を回避できます。


7
RSSフィードを生成するために.ASHXハンドラーを使用した方がいいでしょうか?
Dan Diplo

それはプロジェクトの複雑さに依存すると思います。すべての人がハンドラを作成してコンパイルする能力やスキルを持っているわけではありません。ページasp.netはこのために適切に機能します
Kevin Goff

1
RSSのアイテムを生成し、より良いIMO ASHXから文字列を書くよりもある(例えば、いくつかの項目を削除するLogInViewを使用するなど)他のトリックを行うに:そして、あなたは<リピーターASP>のようなものを使用することができます
chakrit

LinqToXml + ASHXを使用する方法です。
カルロス・ムニョス

これは、RSSフィードの生成以外にも便利です。IIRC、HTML5では、正しく検証するために、最上部の最初の行に<!doctype html>タグが必要です。
ロイティンカー

12

ASP.NET v3.5がルートを追加する前は、HTTPModuleを書き込んでページパイプラインの早い段階でリクエストを書き直すだけで、独自のわかりやすいURLを作成できました(BeginRequestイベントなど)。

以下のようなURL のhttp://サーバー名/ページ/ Param1を/ SomeParams1 / PARAM2 / SomeParams2(多くの場合、正規表現を使用して)以下のように別のページにマッピングさになるだろう。

HttpContext.RewritePath("PageHandler.aspx?Param1=SomeParms1&Param2=SomeParams2");

DotNetNukeには、友好的なURLに対してこれを実行する非常に優れたHttpModuleがあります。.NET v3.5をデプロイできないマシンでも引き続き役立ちます。


これには、すべてのIIS要求をASP.NETにマッピングする必要があります
John Sheehan

または、単に404エラーハンドラです。
FlySwat、2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.