2017-01-21 5 views
1

パラメータに%20の代わりに+とエンコードされたスペースがあると、サーバーで404エラーが返されます。なぜか分からない。 ルートがURLにASP.Netコアのパラメータの '+'が含まれていると404エラーが発生する

[Route("/Search/PRM1/{prm1}/PRM2/{prm2}/PRM3/{prm3}") 

形式である私の第一の質問は、URLのこの種を理解するために、サーバーを依頼する方法でしょうか?

https://example.com/Search/PRM1/prm1%20value/PRM2/prm2+value/PRM3/prm3%20value 

私の第二の質問は、自動的に読みやすくなり+の代わり%20でURLを生成する方法でしょうか? SEOに関する違いはありますか?

URLはCSHTMLで、サーバー側で生成されます(スペースを含む)PRMX変数 "クリア" テキストで

<a href="/Search/PRM1/@prm1/PRM2/@prm2/PRM3/@prm3">link</a> 

WebAPI route 404's when there is a trailing space in the URL

+1

[(してください)Sとして送信することは常に良いですtop URLで安全でない文字を使用する](https://perishablepress.com/stop-using-unsafe-characters-in-urls/)あなたのURLを "人間が読める"ようにするには、空白を ' - '(ダッシュで、アンダースコアではなく、SEOに優しい)に置き換える必要があります。そうでなければ、エンコーディングは正しいアプローチですが、URLをスライスする必要があります。 – NightOwl888

+0

@ NightOwl888あなたのリンクは安全な文字を 'アルファベット文字[0-9a-zA-Z]、特殊文字$ -_ +!* '()、予約された目的のために予約された文字として定義しています。含まれる。 %20のSEOはフレンドリーですか?もしそうなら、私は%20でそれを許可するかもしれません。 – Jean

+0

スペース( '%20')は安全な文字ではありません。マイクロソフトは、スペースを '+'に変換したASP.NETの壊れた動作を修正しました。これで '%20'として正しくエンコードされます。スペースを使用する必要がある場合は(検索機能なので)、クエリ文字列にパラメータを追加し、スペースを '%20'としてエンコードします。 – NightOwl888

答えて

0

あなたが検索をprovdingしている場合:@System.Net.WebUtility.UrlEncode(prm2)の代わり@prm2

を使用した場合+ URLは、私は下のリンクをチェックしましたが、解決策は、ASP.Netのコアで動作していないように生成されていますサービスや特殊文字や.を伴う可能性があるフィールド、+/\Query String

[Route("/Search/PRM1/{prm1}/PRM2/{prm2}/PRM3?prm3=your value here") 
+0

なぜ '+'や '.'が特殊文字になるのかわかりません。私は '\'と '/'について理解しますが、他のものは理解しません。サービスが既にデプロイされているため、クエリー文字列はオプションではないため、下位互換性が必要です(とにかくURL構造を変更する予定はありません:))。 検索フィールドにはこれらの文字は含まれていません(ユーザが入力することはできますが、想定されていなくても)、UrlEncode関数によって生成されています(削除しましたが、 – Jean

+0

ドットの問題点は、ドメイン/サブドメインが直接経路にあるときにドメイン/サブドメインの構造に関係していることです。プラスは特殊な文字でもあります。 –

+0

とにかく、私はあなたの要点を理解していますが、URLパラメータに "+"を付けるとIIS/ASP.Net.Coreの404につながる理由は説明しません: – Jean

関連する問題