none
[ASP.NET MVC]httpsで表示されているページからhttpのページへ移動したい RRS feed

  • 質問

  • VisualStudio2008SP1 ASP.NET MVC2を利用しています。

    ログインページなどでSSL通信を行いたいと思い、証明書をインストールしコントローラを以下のようにしました。

    [LoginController]

    <RequireHttps()> _ Function hoge() As ActionResult Return View() End Function

    hogeビューへのリンクは以下のようにしました。

    <%=Html.ActionLink("**", "hoge", "Login")%>

    これでhttps://~/hage/hogeはうまく表示できました。

    ですが、この状態で表示されているhogeビューにおいて

    <%=Html.ActionLink("TOPに戻る", "Index", "Home")%>

    のようなリンクが自動的に「https://~/Home/Index」となってしまいます。

    SSL通信はログイン処理部分でのみ行いたいので、その処理が終わったあとのリンクはhttpにしたいのです。
    どういう方法がありますでしょうか?
    もしかしてこの方法は一般的ではなかったりするのでしょうか…。

    2012年7月11日 8:06

回答

  • > SSL通信はログイン処理部分でのみ行いたいので、その処理が終わったあとのリンクはhttpにしたいのです。

    一度SSL通ったあとはそのままSSLを使い続けでもいいように思いますが。
    SSLを使わなくしたいのはなぜでしょう。。。

    あと、確認していないので教えてほしいのですが、ASP.NET MVCが生成するリンクがすでに「https」を含んでいるんでしょうか?
    生成されているのは相対的なリンクで、現在の接続がSSLだからそのままSSLを継続している、ということはないですか?


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    • 回答としてマーク 山本春海 2012年8月1日 8:34
    2012年7月12日 1:21
  • うまくアップできないのでやり直しました。

    > その処理が終わったあとのリンクはhttpにしたいのです。
    > どういう方法がありますでしょうか?

    http で始まる絶対 URL パスを使う他ないと思います。

    もし、アプリケーション間での移植などを考えて、絶対 URL パス
    は使いたくない(「http://~/Home/Index」の「~」の部分まで
    ハードコーディングしたくない)なら、VirtualPathUtility クラ
    スの ToAbsolute メソッドを利用して <application> に相当す
    るパスを取得するとか、ホスト名もということであれば HttpRequest.Url
    プロパティで取得する等の方法などがあると思います。

    パスの設定
    http://surferonwww.info/BlogEngine/post/2011/09/04/How-to-specify-path-for-respurce-in-ASPNET-web-application.aspx

    ASP.netでサイトの実行中のサーバーのドメイン名(ホスト名)を取得
    http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/e91049cb-2efe-4a86-8b89-499cc664214f/

    • 回答としてマーク 山本春海 2012年8月1日 8:34
    2012年7月13日 13:37

すべての返信

  • > SSL通信はログイン処理部分でのみ行いたいので、その処理が終わったあとのリンクはhttpにしたいのです。

    一度SSL通ったあとはそのままSSLを使い続けでもいいように思いますが。
    SSLを使わなくしたいのはなぜでしょう。。。

    あと、確認していないので教えてほしいのですが、ASP.NET MVCが生成するリンクがすでに「https」を含んでいるんでしょうか?
    生成されているのは相対的なリンクで、現在の接続がSSLだからそのままSSLを継続している、ということはないですか?


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    • 回答としてマーク 山本春海 2012年8月1日 8:34
    2012年7月12日 1:21
  • うまくアップできないのでやり直しました。

    > その処理が終わったあとのリンクはhttpにしたいのです。
    > どういう方法がありますでしょうか?

    http で始まる絶対 URL パスを使う他ないと思います。

    もし、アプリケーション間での移植などを考えて、絶対 URL パス
    は使いたくない(「http://~/Home/Index」の「~」の部分まで
    ハードコーディングしたくない)なら、VirtualPathUtility クラ
    スの ToAbsolute メソッドを利用して <application> に相当す
    るパスを取得するとか、ホスト名もということであれば HttpRequest.Url
    プロパティで取得する等の方法などがあると思います。

    パスの設定
    http://surferonwww.info/BlogEngine/post/2011/09/04/How-to-specify-path-for-respurce-in-ASPNET-web-application.aspx

    ASP.netでサイトの実行中のサーバーのドメイン名(ホスト名)を取得
    http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/e91049cb-2efe-4a86-8b89-499cc664214f/

    • 回答としてマーク 山本春海 2012年8月1日 8:34
    2012年7月13日 13:37
  • > SSL通信はログイン処理部分でのみ行いたいので、その処理が終わったあとのリンクはhttpにしたいのです。

    一度SSL通ったあとはそのままSSLを使い続けでもいいように思いますが。
    SSLを使わなくしたいのはなぜでしょう。。。

    あと、確認していないので教えてほしいのですが、ASP.NET MVCが生成するリンクがすでに「https」を含んでいるんでしょうか?
    生成されているのは相対的なリンクで、現在の接続がSSLだからそのままSSLを継続している、ということはないですか?


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    小野@どっとねっとふぁんさん

    回答ありがとうございます。
    生成されているリンクは相対リンクで、「https」は含まれていません。
    ブラウザで見えているURLが「https~」になってしまうということです。
    言葉が足らず申し訳ありません。

    SSLをつわかなくしたいというか、ログインだけでなく、たとえばネットショップでのお会計や会員情報の編集などを済ませた後には
    なんとなくSSLは終わらせているものなんだと思い込んでいました…。
    SSLを特に必要としない画面でも、一度SSLになった後それを継続させているのは一般的な振る舞いとして問題ないものということでしょうか。

    2012年7月17日 1:23
  • うまくアップできないのでやり直しました。

    > その処理が終わったあとのリンクはhttpにしたいのです。
    > どういう方法がありますでしょうか?

    http で始まる絶対 URL パスを使う他ないと思います。

    もし、アプリケーション間での移植などを考えて、絶対 URL パス
    は使いたくない(「http://~/Home/Index」の「~」の部分まで
    ハードコーディングしたくない)なら、VirtualPathUtility クラ
    スの ToAbsolute メソッドを利用して <application> に相当す
    るパスを取得するとか、ホスト名もということであれば HttpRequest.Url
    プロパティで取得する等の方法などがあると思います。

    パスの設定
    http://surferonwww.info/BlogEngine/post/2011/09/04/How-to-specify-path-for-respurce-in-ASPNET-web-application.aspx

    ASP.netでサイトの実行中のサーバーのドメイン名(ホスト名)を取得
    http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/e91049cb-2efe-4a86-8b89-499cc664214f/


    SurferOnWwwさん

    回答ありがとうございます。
    絶対パスを使うことが必要なのですね。
    そういえば相対パスでしか試していませんでしたので、httpでのURLをハードコーディングしたところ、確かにhttpsにはなりませんでした。

    テスト環境などのことも考えると、やはり絶対URLはなるべく避けたいです。
    ですが、SSLが必要な処理が終わった後、どこに飛ばすかというとトップページですので、それくらいならハードコーディングにしておいても
    いいかもしれないな、と思ったりもしています。(多少テストがめんどくさいくらいでしょうか)

    教えていただいた方法ですが、こんなやり方もあるのですね。
    画面遷移と教えていただいた方法を合わせて再検討してみたいと思います。

    2012年7月17日 1:46