19

C# で記述された ASP.NET Web アプリケーションを継承しました。サイト全体の多くのページで、ホスト名は次を使用して取得されます。

BaseHost = Request.Url.Host;

私は Visual Studio 2012 Express を使用しており、ローカルの IIS Express サーバーにインストールされているため、ローカルでデバッグ/実行すると、ホスト名 (localhost) にポート番号が追加されたままになっているようです。上記のコードではポート番号が含まれないため、コードによって生成されたリンク (メニュー項目のリンク、リダイレクトなど) が壊れます。

コードを次のように変更することで、この問題を解決できることがわかりました。

BaseHost = Request.Url.Authority;

これは、ローカルで実行しているとき (localhost:4652) およびステージング サーバー (development.mysite.com) に公開されているときにポートを含めることで修正されるようです。

私の質問: これは悪いフォームですか? これがライブ サイトで問題を引き起こす時間や状況はありますか? これらすべてのインスタンスをすばやく置き換える方がはるかに簡単に思えます。append の小さなルーチンを作成することを検討しました: with Request.Url.Portが、 を使用するだけの方が簡単なようですRequest.Url.Authority。簡単すぎるかも…

オンラインと MSDN で質問を調べてみましたが、答えが見つかりません。

4

2 に答える 2

25

MSDN によるとAuthority、ポート番号は含まれていますが、含まれてHostいません。別の側面は、Authority必要に応じて予約文字をエスケープすることです。

あなたのアプリケーションを知らなければ、それが良い考えであるかどうかを言うのは難しいですが、一般的には何も壊れないと思います...だから先に進んでください...

別のオプションは、IIS Express の代わりにアプリケーション IIS を実行することです...

于 2013-08-18T20:34:42.790 に答える
2

これに関する私の問題は、ポートが必要ない場合でも、常にポートを追加することです。これにより、場合によっては複数のサーバーで問題が発生する可能性があります。たとえば、負荷分散された Web サーバーのペアのファイアウォールの背後にある実稼働サーバー環境では、ファイアウォール ポートを配置し続けましたが、ポートが原因で URL が壊れました。ファイアウォールを介して正しくマップされないサーバー ファーム内の特定の Web サーバーに関連付けられていました。そのため、この方法を複数のサーバーで使用している場合は、非常に注意が必要です。これにより、アプリケーションに重大な問題が発生し、Url.Host を使用するように戻す必要がありました。さらに、ポート番号により、実稼働 Web URL が奇妙に見えました。

于 2015-03-09T22:47:31.370 に答える