ASP.NET MVCでWEBサイトを作成する場合には、例えばローカルのIISで表示するとそのアドレスは
http://localhost/MyWebSite/・・・
こんなふうになる。
そのサイトを外部に公開した場合には、
http://www.example.com/MyWebSite/・・・
こんな感じ。
さて、ASP.NET MVCの場合には、例えばこんなふうにすれば、
var UrlAction = '@Url.Action("Index", "Home")';
ローカルでも、グローバルに公開した場合でも、
http://localhost/MyWebSite/Home/Index/ http://www.example.com/MyWebSite/Home/Index/
が得られる。
ところが、ワテが調べた限りでは、
http://localhost/MyWebSite/ http://www.example.com/MyWebSite/
のように、WEBサイトのベースのURLを保持しているメンバ変数や、メソッドが見つからない。ワテの調査不足かもしれないが。
で、何か良い方法が無いかなあと思って調べてみたら解決した。
例えば、最初に試したのがこれ。
@{ var currentUrl1 = HttpContext.Current.Request.Url.AbsoluteUri; // http://www.example.com/MyWebSite/Home/Index/ が得られる。 }
この場合には、余分な Home/Index 部分がくっ付いてしまう。
まあ、正規表現などを使ってスラッシュを区切り記号として必要な情報を取り出せば目的のWEBサイトのベースアドレスは得られる。
でもあまり泥臭い手法は利用したくない。
ASP.NET MVCでサイトのベースアドレスを取得する方法
@{ var baseUrl = "" + Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') + "/"; // http://localhost/WarekoMapsMobile/ が得られる。 }
まあ、ネットのいろんな情報をミックスしてこんなふうにしてみた。
処理自体は簡単だ。
味噌は末尾のスラッシュ追加を保証している部分。
もし末尾にスラッシュが無ければ補うなどの処理をif文で判定して処理しても良いが、それもコードが煩雑になる。
ここでは、
.TrimEnd('/') + "/";
を使って、末尾にスラッシュが有っても無くても兎に角除去する。
その後で、自分でスラッシュを追加しておく。
これで、if文などの条件判断をしなくても良い。
まあ、ワテの場合、こういう他愛もない小細工が好きだ。
その結果、益々泥臭くなってしまったかも。
正規表現でやるほうがスマートかな。
まあ、出来たのでこれで良いのだ!
まとめ
ASP.NET MVCやASP.NET COREは面白い。
ASP.NET MVCをやるんなら、山田 祥寛さんの本が人気ある。
著者の山田 祥寛さんは、プログラミング解説本では超有名人だ。
ASP.NET COREの場合も、基本はASP.NET MVCなのでまずはMVCの手法をマスターするのが良いだろう。
なお、ワテのブログの読者の方で、
- ASP.NET MVC
- Visual Studio
- C#
- その他、プログラミングに関する話題
などに関して、何か質問、相談など有りましたら、お気軽にコメント欄からご連絡下さい。
コメント