JavaScriptを使用してベースURLを取得するにはどうすればよいですか?
たとえば、Visual Studioからサイトを閲覧し、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は切り捨てられます。
JavaScriptでこのような検出を行わず、代わりに.NETコードから値を渡す必要があります。 _http://server/MyApp/MyApp/action
_のようなURLでは、コントローラーの名前とアプリケーションへのパスがわからないという問題に常に直面する危険があります。
Layout.cshtmlファイル(または必要な場所)に次のコードを追加します。
_<script type="text/javascript">
window.applicationBaseUrl = @Html.Raw(HttpUtility.JavaScriptStringEncode(Url.Content("~/"), true));
alert(window.applicationBaseUrl + "asd.html");
// if you need to include Host and port in the url, use this:
window.applicationBaseUrl = @Html.Raw(HttpUtility.JavaScriptStringEncode(
new Uri(
new Uri(this.Context.Request.Url.GetLeftPart(UriPartial.Authority)),
Url.Content("~/")
).ToString(), true));
alert(window.applicationBaseUrl + "asd.html");
</script>
_
new Uri()
部分は、URLが常に正しく結合されるために必要です(各部分が_/
_記号で始まるか終わるかを手動で確認することなく)。
var url = window.location.href.split('/');
var baseUrl = url[0] + '//' + url[2];
JavaScript(クライアント)は展開(MyApp)について何も知らず、pathinfoの一部として(/ home/indexのように)処理するため、これは可能だとは思いません。回避策として、ドメインまたはポートに従ってpathinfo(location.pathname)の解釈を試みることができます。
ただし、パスを含むグローバルスコープ(または自分に合ったもの)にJavaScript変数を設定することもできます(パスはサーバーによって生成され、変数に配置されます)。
これは、html-Headで次のようになります。
<script type="text/javascript">
var global_baseurl = '<insert server side code that gets the path depending on your server side programming language>';
</script>
以下のコードを試してください。
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());
ありがとう、
シヴァ
var base_url = "@Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")"
レイアウトファイルで定義し、base_urlを追加します。これは私のために働いた。
ページのheadタグでベースURLを設定できます。すべてのリンク/ hrefは、これを使用してrelatieve hrefを呼び出します。
@{ var baseHref = new System.UriBuilder(Request.Url.AbsoluteUri) { Path = Url.Content("~/") }; }
<base href="@baseHref" />
説明:
きれいな解決策は次のようになると思います
Putting_layout
Htmlのように
<div id="BaseUrl" data-baseurl="@Context.Request.Url.GetLeftPart(UriPartial.Authority)@Url.Content("~/")"></div>
Context.Request.Url.GetLeftPart(UriPartial.Authority)は、
local http:// localhost:20201 from IISを指定すると http:// localhost
Url.Content( "〜/")ローカルでは空になりますが、IISでアプリ名、MyAppになります
次にJsから:
var baseUrl = $("#BaseUrl").data("baseurl");
できるよりそれを使用する
$.getJSON(baseUrl + "/Home/GetSomething", function (data) {
//Do something with the data
});
https://msdn.Microsoft.com/en-us/library/system.uri.getleftpart(v = vs.110).aspxhttp://api.jquery.com/data /