マークアップに含まれる ascx コントロールがあります。
<a href="<%# GetName() %>">
ascx.cs コードビハインド ファイルには、次のものがあります。
protected string GetName() {
return HttpContext.Current.Request.ServerVariables["HTTP_HOST"];
}
コードビハインドには、このメソッドを呼び出すボタンのハンドラーもあります。
protected void myButtonClick(object sender, EventArgs e)
{
string server = GetName();
...
}
https://my.site.com/test.aspxのようなコントロールを含むページをリクエストすると、ページに外部名 (my.site.com) が表示されますが、ボタンを押すとハンドラーの呼び出しがcodebehind は内部名 (my123.test.local) を取得します。
なぜ違いがあるのか 誰かが私に説明できますか?コードビハインドで外部ドメイン部分を取得するにはどうすればよいですか?
ps SERVER_NAME と HTTP_HOST はどちらも同じ結果になります。
また、インターネット (https://my.site.com/test.aspx) から次のようなページにアクセスすると:
Response.Write("SERVER_NAME 1: " + Request["SERVER_NAME"]);
Response.Write("SERVER_NAME 2: " + HttpContext.Current.Request.ServerVariables["SERVER_NAME"]);
次のように、1 行目には内部名が表示され、2 行目には外部アドレスが表示されます。
SERVER_NAME 1: my123.test.local
SERVER_NAME 2: my.site.com