2012-01-03 3 views
2

私は今週のライブに行く予定のアプリケーションの最終的な問題を作業中です。私はコードを修正するか、このコードを期待どおりに動作させるためにIIS/DNS設定で修正する必要があるものを私たちのホストに説明するのに助けが必要です。ここでなぜRequest.Url.Authorityが私のドメインではなく内部パスを返すのですか

コードです:

public string BaseSiteUrl 
{ 
    get 
    { 
     var c = this.ControllerContext.RequestContext.HttpContext; 
     string baseUrl = c.Request.Url.Scheme + "://" + c.Request.Url.Authority 
         + c.Request.ApplicationPath.TrimEnd('/') + '/'; 
     return baseUrl; 
    } 
} 

私は、データベースに永続化されますURLを生成するために、私のコントローラでこれに電話をかけます。

ローカルマシンで実行するとうまく動作します。ただし、ベータ版サーバーで実行されている場合は機能しません。

ベータ版で期待される結果。ベータ版のサーバーでは、これはベータ版で、実際の結果dr405

  • https://beta.sc-pa.com/dr405/

という名前のアプリケーションです。

  • http://SERVERNAME1.GROUP1.SUBGROUP.local/dr405/

答えて

0

、このプロジェクトを取得する必要が私たちのケースで我々はこのような何かを私はアプリケーションのURLの主要部分をハードコーディングする必要がありました。私が変更を加えた後、私はそれを最初に動的にしようとしたことで馬鹿げたように感じました。私はドメイン名がどのくらいの頻度で変更されるべきかを意味します。

1

を(私はあなたがセキュリティのためにCAPSで見るものに、サーバー/ドメイン名を変更)私はあなたが書いた方法を必要としないと思います。拡張メソッドを追加するクラスはUrlHelperです。あなたはこのようContent()方法を使用する必要がありますあなたのサイトのためのベースURLを取得するには:http://SERVERNAME1.GROUP1.SUBGROUP.local/dr405/結果は内部のホスト名であるように、あなたの例では

var baseUrl = Url.Content("~/"); 

を、それが見えます。開発マシンで内部のホストはの公開者と一致します。ホスティングプロバイダは、特にホスティングソリューションを共有している場合は、これを変更することはできません。

+0

ありがとうございますが、それはまったく役に立ちません。私は完全修飾URLが必要です。これは相対的なURLを生成するので、2番目のアプリケーションでは、beta.sc-pa.comを指すhrefタグは次のようになります: 'href ="/dr405 // dr405/Wizard/Review/B00593.2660 "' –

+0

問題は、ホスト名のコードを実行しているサーバーに問い合わせる必要があることです。しかし、(正しく)そのホスト名は 'SERVERNAME1.GROUP1.SUBGROUP.local'と考えています。トラフィックをルーティングする公開用のDNSエントリがあるからといって、そのことを認識しているわけではありません。私が言ったように、 'SERVERNAME1.GROUP1.SUBGROUP.local'を指し示す多くの**正面から見えるDNSエントリがあるかもしれません。 – Yuck

+2

ありがとう@Yuck。これは仕事のように聞こえる...... **キャプテンハーコドー** –

0

ロードバランサなどの背後にいる場合は、サーバー変数をチェックする価値があります。

string hostName = Request.Headers["x-forwarded-host"]; 
hostName = string.IsNullOrEmpty(hostName) ? Request.Url.Host : hostName; 

私はしばらく前に尋ねたこの質問は関心があるかもしれない:時間の制約に

Asp.net mvc 301 redirect from www.domain.com to domain.com

関連する問題