19

私は ASP.NET MVC でカスタム コントローラーを実装していますが、次のように、クラス/列の名前とその値を識別できるように、URL でコロンを使用できるようにしたいと考えています

http://example.com/user:chaiguy

...しかし、ASP.NET または IIS では、URL にコロンを使用できないようです。私はいくつかの掘り下げを行い、明らかにセキュリティ上の問題と見なされています、MVC を使用しており、すべてのURL パスを手動で処理しており (文字列として扱っているだけです)、それらをファイル システムに関連付けていないため、これはかなり確信しています適用されません。

また、カスタム Http ハンドラなどの実装についての話も聞きました。

どんな考えやアイデアでも大歓迎です。


えーと……どうして?真剣に、なぜ標準を破るのですか?– ランドルフォ

...

では、Web サービスの構築について調査することをお勧めします。WCF はそのための優れたテクノロジであり、IIS で適切にホストされます。

私はたまたま URL が好きで、WCF は私の目的には複雑すぎます。REST のように URL 互換である必要がありますが、階層をナビゲートしたり、適切にレイアウトされたものを実行したりするだけではありません。私が /users/chaiguy で抱えている問題は、何もない階層を解釈していることです。私のシステムでは、「ユーザー」はクラスであり、フォルダーではありません。user:chaiguy は、「chaiguy」の値を持つユーザー クラスのインスタンスを意味し、それは単一のエンティティであり、子エンティティを持つ可能性があります。たとえば、次のようになります。

/user:chaiguy/name

…そのエンティティの名前を表示したい。あなたの方法でこれを行った場合、次のようになります。

/users/chaiguy/name

問題は、クラスと値をどうやって知るかということです。次のように解釈できます。

/users/chaiguy:name

私のシステムでは、それは意味がありません。私が何をしているのか分かりますか?もう少し複雑な例を挙げると、複数のインスタンスから user エンティティの子を選択するとします。そのため、ユーザーは複数の電子メール アドレスを持っている場合があります。1つを選択するには、次を使用できます。

/user:chaiguy/email:me@here.com/

したがって、実際には再帰的です。これはファイル パスではなく、XPath に似ています (または、私がまだほとんど知らないことに基づいて jQuery に似ている可能性があります)。つまり、ハードワイヤされたファイル パスというよりは、動的に評価されるクエリの選択です。サーバー上で評価されます。

間違いなく、私はここで典型的な Web サイトや Web サービスを構築しているわけではありません。

4

8 に答える 8

20

web.configのrequestPathInvalidCharacters属性を変更します。httpRuntime

<httpRuntime maxRequestLength="20480" requestValidationMode="2.0" requestPathInvalidCharacters="" maxQueryStringLength="20480" />

また、ASP.NET は要求パスからコロンをブロックしなくなります。

于 2011-04-25T21:40:25.480 に答える
4

ここで同様の質問に答えました: https://stackoverflow.com/a/12037000/134761

ASP.net では、「?」の前にコロンを使用できないようです。%3A としてエンコードされている場合でも、URL で。

たとえば、これらは機能しません。

http://foo.org/api/persons/foo:bar

http://foo.org/api/persons/foo%3abar

しかし、これは機能します:

http://foo.org/api/persons?id=foo%3abar

すべての例で、ASP.NET MVC が適切にデコードされた id 引数として "foo:bar" を渡すことが期待されます。これをMVC4でテストしたところ、うまくいくようです。クエスチョン マークの前の URL エンコーディングを受け付けないのは面倒ですが、それには十分な理由があると確信しています。おそらく、疑問符の前のすべてを有効な URL と疑問符の後の引数に保持するためです。

于 2012-08-23T05:20:57.580 に答える
1

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Services \ HTTP \ Parameters\AllowRestrictedCharsを設定してみてください。これはhttp://support.microsoft.com/?id=820129からのものです。ASP.NET/MVCが独自にチェックを行うかどうかはわかりませんが、http.sysのみがブロックしている場合は、これで修正されるはずです。

于 2009-07-07T09:06:12.970 に答える
1

自分のやりたいことをもう一度考えてみることをお勧めします。パスを使用してコンテキストを示し、クラス名とフィールド名を非表示にして、URL パス内の特定のコンテキストをクラス名とフィールドにマッピングします。たとえば、ユーザーを示す必要がある場合は、example.com/users/chaiguyではなく のように URL レイアウトを作成しますexample.com/user:chaiguy

于 2009-03-20T18:50:44.673 に答える
0

実際に利用できる WCF REST があり、ここで利用可能な WCF スターター キットを使用して、1 時間以内に簡単に起動して実行できます。これは、REST の機能を利用して、WCF の使いやすさとマージします。また、WCF を使用すると、必要に応じて独自のトランスポート層を作成して、URL を任意の方法で解釈することもできます。スターター キットの興味深い点の 1 つは、Url にスペースを使用できることです。これは実際に、真の REST ファンディにとって頭痛の種でした。

私は WCF のためにそれを見ることに熱心ではありませんでしたが、実際にはそれほど多くを知る必要はありません。このソリューションは、コードを追加するだけで、必要なものをすべて作成します。

于 2009-07-07T09:14:34.310 に答える
-4

ピリオドを使用することをお勧めします。HTTP プロトコルに基づく REST は、標準を維持し、大きな成功を収めた HTTP の新しい用途を構築する例です。おそらくあなたはそれを行うことができます。

および「.」多くの言語で標準の「class.method」または「class.attribute」です。

今、私は時間の URL パラメータでコロンを使用したかったのですが、いくつかの場所でそれを行っています。私はまだそれを回避できるかどうかを確認する必要があります。

PS、私はこれを使用するかもしれません: http://www.businesscasualblog.com/2009/07/how-to-share-a-link-to-a-specific-timecode-in-youtube-video.html

基本的に「--h--m--s」

于 2012-01-02T03:13:18.497 に答える
-10

コロンは URL で有効ですか? 短い答えいいえ

長い答え、はい、それが url fragmentにある場合。

例: http://site/gwturl#user:45/comments(コロンがハッシュタグの前にあることに注意してください)

ソース

于 2011-04-04T15:08:35.863 に答える