Twitter認証後のコールバック先URLなど、自サイトのURLを指定することがあると思います。
Web.configにパラメータとして登録するという力技もありますが、環境を作る度に設定が必要なので面倒ですよね。なんか簡単な方法ないかなーというのでこんな感じでやっつけてみました。
Request.Urlを使う
ControllerクラスのRequest.Urlを使うことにしました。もちろん、HTTPないしHTTPSでの要求がないと使えません。
Url(Uriクラス)の情報は下記を参照して下さい。
その1
Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery, "");
AbsoluteUriにはhttp://mydomain.com:63543/Candidate/Timeline?userId=4e30969c
のような値が格納されているので、
PathAndQueryに格納されている/Candidate/Timeline?userId=4e30969c
の値で置き換えてやれば…という感じ。
ちょっとやっつけ感がひどいですね。
その2
string.Format("{0}://{1}", Request.Url.Scheme, Request.Url.Authority);
Schemeではhttp等のスキーム名が、Authorityにはmydomain.com:63543
といったサーバ名とポート番号が取得できますのでこれを繋げてあげる感じ。
これならまぁいいかなーというのでこっちを使うことにしました。
所感
きっともっといいやり方があるはず。「そんな小細工せんでもこれ使えや」的な
追記(10/4) これがベストな方法だと思う
@haxeさんが教えてくれました。ありがとうございます。
@nakaji GetComponents()じゃないのくわー
— はぇ~ (@haxe) 2014, 10月 3
Request.Url.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped);
— はぇ~ (@haxe) 2014, 10月 3
ちゃんとメソッドが用意されていたんですね。
すっきりしました!