2

Azure でホストされている mvc 4 を使用して Web ソリューションを構築しています。winforms/wpf の世界から来て、Web 構成について知らないことがたくさんあることに気づきました。私もMVCの初心者と見なされるので、ここで明らかなことを見落としているかもしれません...

私の Azure Web ロールでは、2 つのエンドポイント (1 つは http 用、もう 1 つは https 用) を構成しました。私が達成したいのは、パブリック ビュー/コントローラーのセットを http エンドポイントにバインドし、ssl で保護されたコントローラーのセットを https エンドポイントにバインドすることです。

例えば

http://www.mysite.com/home

https://www.mysite.com/login

https://www.mysite.com/account

私が探しているのは、コントローラーを構成済みのエンドポイントにバインドする方法だと思います。それが不可能な場合は、http://www.mysite.com/loginがhttps://www.mysite.comにリダイレクトされるようにします。 /login、および保護されていないコントローラーの場合はその逆。

私のソリューションも一連の mvc 4 webapi コントローラーで構成されており、これらはすべて ssl で保護されています。これらを http エンドポイントで公開することを避けることができない場合、誰かが安全でないエンドポイントでこれらにアクセスしようとした場合、http エラー コードで応答したいと思います。

これをプログラムで解決できると確信していますが、構成を通じてこれを解決するクリーンな方法はありますか?


おまけとして、次のように設定するのもクールです。

https://secure.mysite.com/login

これは、2 つのmvc 4 プロジェクトをセットアップ<Site>し、サービス構成ファイルで2 つの を定義することで実現しました。ただし、これを 2 つのプロジェクトに分割したくありません。これは、ある種の構成から達成することは可能ですか?

作業するものを提供するために、ここに私の ServiceConfiguration.csdef の抜粋があります

 <Sites>
  <Site name="www" physicalDirectory="..\project1">
    <Bindings>
      <Binding name="HttpIn" endpointName="HttpIn" />
    </Bindings>
  </Site>
  <Site name="api" physicalDirectory="..\project2">
    <Bindings>
      <Binding name="HttpsIn" endpointName="HttpsIn" hostHeader="secure.mysite.com" />
    </Bindings>
  </Site>
</Sites>
<Endpoints>
  <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="Certificate1" />
  <InputEndpoint name="HttpIn" protocol="http" port="80" />
</Endpoints>
4

1 に答える 1

1

通常、これにはRequireHttpsAttributeを使用します (たとえば AccountController のように、HTTPS 経由でのみアクセスできるようにするコントローラーまたはアクションにこれを適用します)。Carlos Figueira も、彼のブログで ASP.NET Web API を実装しています。

于 2012-08-19T06:10:27.593 に答える