javascriptを使用してMVCアプリケーションのベースURLを取得する方法

javascriptを使用してベースURLを取得するにはどうすればよいですか?

例:ビジュアルスタジオから自分のサイトを閲覧したとき、URLが「http://localhost:20201/home/index」であれば、「http://localhost:20201」を取得したい

IISでサイトをホストしている場合、仮想ディレクトリ名がMyAppでURLがhttp://localhost/MyApp/home/indexであれば、http://localhost/MyAppを取得したいです。

私は location.protocol + location.hostname (と location.host) を使ってみました。Visual Studio で私のサイトをブラウズするときはうまくいきますが、IIS でホストするときは http://localhost となり、/MyApp は切り捨てられます。

var url = window.location.href.split('/');
var baseUrl = url[0] + '//' + url[2];
解説 (3)

JavaScript(クライアント)はあなたのデプロイメント(MyApp)について何も知らず、pathinfoの一部として扱うので、これは不可能だと思います(ちょうど/home/indexのような)。回避策として、ドメインやポートに応じてpathinfo(location.pathname)を解釈することを試みることができます。

しかし、パスを含むJavaScript変数をグローバルスコープ(またはあなたが望むもの)に設定することができます(パスはサーバーによって生成され、変数に格納されます)。

これは、html-Headに次のように記述することができます。

<script type="text/javascript">
    var global_baseurl = '';
</script>
解説 (0)

以下のコードを試してみてください。

function getBaseURL() {
    var url = location.href;  // entire url including querystring - also: window.location.href;
    var baseURL = url.substring(0, url.indexOf('/', 14));

    if (baseURL.indexOf('http://localhost') != -1) {
        // Base Url for localhost
        var url = location.href;  // window.location.href;
        var pathname = location.pathname;  // window.location.pathname;
        var index1 = url.indexOf(pathname);
        var index2 = url.indexOf("/", index1 + 1);
        var baseLocalUrl = url.substr(0, index2);

        return baseLocalUrl + "/";
    }
    else {
        // Root Url for domain name
        return baseURL + "/";
    }

}

document.write(getBaseURL());

ありがとうございます。

Siva

解説 (2)