web-dev-qa-db-ja.com

URLでコンマを使用できますか?

通常、URL書き換えを使用してコンテンツIDをWebサイトに渡します。

 Foo.1.aspx 

に書き換えます

 Foo.aspx?id=1

特定のアプリケーションでは、複数のIDを1つのページに渡す必要があるため、これを受け入れるように書き直しました。

 Foo.1,2,3,4,5.aspx

これはCassini(Visual Studioの組み込みアドホックWebサーバー)では正常に機能しますが、IISを実行しているライブサーバーで試してみると、「Internet ExplorerでWebページを表示できません」と表示されます。これはIIS制限ですか?カンマの代わりにダッシュまたはアンダースコアを使用するだけですか?

33
Herb Caudill

デフォルトでは、URLルーティングは最初にファイルが存在するかどうかを確認し、ファイル名にコンマが有効ではないことを思い出します。 IISには、処理のためにasp.netに到達する前に要求を中止するレガシーコードが含まれている場合があります。

Scott Hanselmanの ブログ投稿 はこれについて少し語っており、あなたに関連があるかもしれません。


一般的なコメントとして:URL書き換えは通常、URLをわかりやすく覚えやすいものにするために使用されます。

~/page.aspx?id=1,2,3,4~/page/1-2-3-4.aspxより悪くも良くもない:どちらも使いにくいので、なぜ余分な努力をするのか?できるからといって、新しいURLフォームを作成しないでください。ユーザー、ヘルプデスク、その他の開発者は混乱するだけです。

URLの書き換えは変換に最適です

~/products/view.aspx?id=1
~/products/category.aspx?type=beverage

~/products/view/1
~/products/category/beverage
25
Robert Paulson

URLで%2cを使用してコンマを置き換えてみてください。

14
Gordon

ConroyPによる回答に加えて、RFCへの別の引用が以下にあります。いくつかの安全でない文字に注意していますが、コンマには言及していません(コンマが安全であることを示唆しています)。

文字は、いくつかの理由で安全ではありません。スペース文字は安全ではありません。URLが文字起こしまたはタイプセットされたり、ワープロプログラムの処理が行われたりすると、重要なスペースが消えたり、意味のないスペースが導入される可能性があるためです。文字「<」および「>」は、フリーテキストのURLの区切り文字として使用されるため、安全ではありません。一部のシステムでは、引用符( "" ")を使用してURLを区切ります。文字"# "は安全ではなく、World Wide Webおよび他のシステムでURLをフラグメント/アンカーから区切るために使用されるため、常にエンコードする必要があります文字「%」は、他の文字のエンコードに使用されるため安全ではありません。ゲートウェイや他のトランスポートエージェントがこのような文字を変更することがあるため、他の文字は安全ではありません。これらの文字は「{」、「} "、" | "、"\"、" ^ "、"〜 "、" ["、"] "、および" `"。

安全でない文字はすべて、URL内で常にエンコードする必要があります。たとえば、通常はフラグメントまたはアンカー識別子を処理しないシステムでも、文字「#」をURL内でエンコードする必要があるため、URLを使用する別のシステムにURLをコピーしても、変更する必要はありません。 URLエンコード。

5
speedplane

仕様に従って、パス、クエリ文字列、およびフラグメントにカンマを使用できます。 IEが仕様に準拠していない場合でも驚かないでしょう。Claudiuが示唆するようにエンティティを試してみてください。

3
eyelidlessness

フロントコントローラーを設置した場合、次のようなことができます。

index.aspx?c=Foo/1/2/3/4

フロントコントローラーは、メソッド名とそれに渡すパラメーターを取得します。これは最近ではかなり一般的な手法です。

1
Luke

複数のIDをacceptにする正しい方法は次のとおりです。

Foo.aspx?id=1;id=2;id=3;id=4;id=5

これがターゲットであることに注意してください。 URLを書き換える場合、ソースをどのように表示するかについて、独自のルールをある程度設定できます。

StackOverflowでもこれを学ばなければなりませんでした。この質問をご覧ください:
文字列から整数を分割

1
Joel Coehoorn

回答

問題はコンマでした。 IISがローカルホストで問題なく表示できるため、IEに問題があった(IEではない)と推測しています。

とにかくURL形式をこれに変更しただけで、うまく機能します。

Foo.1-2-3-4-5.aspx
1
Herb Caudill