2016-08-03 3 views
1

私はMVCをかなり新しくしています。最近私はサイトを開発し、それをプロキシサーバーの後ろにホストしました。 internalhostname/site/{controller}/{action}/{id}を使用して自分のサイトにアクセスし、正常に動作します。 しかし、ユーザーがサイトに接続しているときは、外部ホスト名/アプリケーション/サイト/ {コントローラ}/{アクション}/{ID}のような外部URLを使用します。デフォルトのルート設定に従ってコントローラへの呼び出しを開始しようとすると、生成されるURLは外部ホスト名/ site/{controller}/{action}/{id}になり、 "/ apps"の通知はなくなります。MVCルートでプロキシサーバーによって作成された仮想パスを処理する方法は?

これは私にとって既知の問題です。 URLを作成するとき、ホスト名には「/ apps」が含まれないためです。通常のASP.NETページで作成された他のサイトでは、単にURLの作成を乗っ取ってホストをホスト/アプリに置き換えるだけで問題を解決できます。しかし、私はMVCの世界でこれを行う方法を知らない。

また、コントローラーとアクションでリクエストを開始するTelerikコントロール(MVC用)を使用していますが、最終的に間違ったURLにつながります。

ルート設定はデフォルトです。私はルールを変更しようとしましたが、それらのすべてはURLフォーマットにしか影響しません。それ以前に行動を変えることはできません。 私は数日間苦労しており、道を見ることができませんでした。いくつかのアドバイスをいただきありがとうございます。ありがとうございました。

私はプロキシルールを変更できません。それは私の選択肢ではありません。

環境:これらの場合、MVC 4、IIS 7.0。

+0

問題はMVC自体の外にあることが判明しました。コントローラー内で別のコントローラーとアクションを呼び出すときは問題ありません。しかし、Telerikコントロールや他のHTMLコントロールを使用してビューからコントローラ/アクションを呼び出そうとすると、間違ったURLが作成されます。幸いなことに、これらのコントロールでは、絶対URLを使用してアクションを呼び出すことができます。ホスト名(この "/ apps /"パスを導入することがわかっているところ)に基づいてこれらのURLを生成する方法を作成しました。これにより、私の要求に合った正しい経路が作り出され、正しいコントローラーに到達します。 –

答えて

0

あなたのルート設定に新しいエントリを追加してみてください。

routes.MapRoute(
    "Default2", // Route name 
    "apps/{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults, 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

注意してください。

+0

お返事ありがとうございます。私は実際にこれを試してみましたが、externalhostname/apps/site/apps/{controller}/{action}/{id}のようなURLを作成しています。 –

+0

私は私の質問を少しはっきりさせるために編集しました。私はいくつかの言葉に角括弧を使用してはいけません。 –

+0

@ChenWangちょっと混乱。今私の答えは有効ではありません:) – Sherlock

関連する問題