2

我正在使用托管在 Azure 上的 mvc 4 构建 Web 解决方案。来自 winforms/wpf 世界,我意识到我对 Web 配置有很多不了解的地方。我也被视为 MVC 新手,所以我可能在这里忽略了一些明显的东西......

在我的 azure web 角色中,我配置了两个端点,一个用于 http,一个用于 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

我通过设置两个mvc 4 项目<Site>实现了这一点,在服务配置文件中定义了两个s。但是,我不想把它分成两个项目。这可以通过某种配置来实现吗?

为了给你一些工作,这是我的 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(将其应用于您只想通过 HTTPS 访问的任何控制器或操作,例如 AccountController)。Carlos Figueira在他的博客上也有一个 ASP.NET Web API 实现。

于 2012-08-19T06:10:27.593 回答