104

現在のドメインを取得する最善の方法は ASP.NET でしょうか?

例えば:

http://www.domainname.com/subdir/は http://www.domainname.comを生成する必要があります http://www.sub.domainname.com/subdir/http://sub.domainname.comを生成する必要があります

ガイドとして、「/Folder/Content/filename.html」(ASP.NET MVC で Url.RouteUrl() によって生成されたものなど) のような URL を URL に直接追加できるはずであり、機能するはずです。

4

11 に答える 11

189

MattMitchell と同じ答えですが、いくつかの変更があります。これにより、代わりにデフォルトのポートがチェックされます。

編集:構文を更新しRequest.Url.Authority、提案どおりに使用する

$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"
于 2010-05-20T22:34:17.400 に答える
42

このリンクによると、良い出発点は次のとおりです。

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host 

ただし、ドメインがhttp://www.domainname.com:500の場合、これは失敗します。

次のようなものがこれを解決するのに魅力的です。

int defaultPort = Request.IsSecureConnection ? 443 : 80;
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host 
  + (Request.Url.Port != defaultPort ? ":" + Request.Url.Port : "");

ただし、ポート 80 と 443 は構成によって異なります。

そのため、カルロス・ムニョスからの上記IsDefaultPort受け入れられた回答のように使用する必要があります。

于 2008-09-15T03:06:03.513 に答える
29
Request.Url.GetLeftPart(UriPartial.Authority)

これはスキームに含まれています。

于 2011-12-31T05:30:03.880 に答える
20

警告!Current.Request .Url.Hostを使用しているすべての人へ。CURRENT REQUEST に基づいて作業していること、および現在の要求が常にあなたのサーバーにあるとは限らず、他のサーバーにある場合があることを理解してください。

したがって、これを Global.asax の Application_BeginRequest() のようなもので使用すると、99.9% の確率で問題ありませんが、0.1% は自分のサーバーのホスト名以外のものを取得する可能性があります。

これの良い例は、私が少し前に発見したものです。私のサーバーは時々http://proxyjudge1.proxyfire.net/fastenvにアクセスする傾向があります。Application_BeginRequest() はこの要求を喜んで処理するので、この要求を行っているときに Request.Url.Host を呼び出すと、proxyjudge1.proxyfire.net が返されます。「当たり前」と思っている人もいるかもしれませんが、0.1% の確率でしか発生しないため、非常に気づきにくいバグだったので注意してください : P

このバグにより、構成ファイルにドメイン ホストを文字列として挿入する必要がありました。

于 2011-04-30T23:27:49.337 に答える
14

使わない理由

Request.Url.Authority

ドメイン全体とポートを返します。

あなたはまだhttpまたはhttpsを理解する必要があります

于 2011-07-17T23:38:24.273 に答える
3

シンプル短い方法(スキーマ、ドメイン、ポートをサポート):

使用するRequest.GetFullDomain()

// Add this class to your project
public static class HttpRequestExtensions{
    public static string GetFullDomain(this HttpRequestBase request)
    {
        var uri= request?.UrlReferrer;
        if (uri== null)
            return string.Empty;
        return uri.Scheme + Uri.SchemeDelimiter + uri.Authority;
    }
}

// Now Use it like this:
Request.GetFullDomain();
// Example output:    https://example.com:5031
// Example output:    http://example.com:5031
于 2017-08-20T02:36:56.183 に答える
1

別の方法:


string domain;
Uri url = HttpContext.Current.Request.Url;
domain= url.AbsoluteUri.Replace(url.PathAndQuery, string.Empty);
于 2010-02-24T15:00:37.317 に答える
1

どうですか:

NameValueCollection vars = HttpContext.Current.Request.ServerVariables;
string protocol = vars["SERVER_PORT_SECURE"] == "1" ? "https://" : "http://";
string domain = vars["SERVER_NAME"];
string port = vars["SERVER_PORT"];
于 2008-09-15T15:40:13.513 に答える
-1

どうですか:

String domain = "http://" + Request.Url.Host
于 2008-09-15T03:14:04.697 に答える