ASP.NET MVC RequireHttps属性不起作用

时间:2015-03-11 16:23:55

标签: c# asp.net asp.net-mvc asp.net-mvc-4 azure

我正在尝试在我的MVC应用程序中启用HTTPS。在我的FilterConfig.cs中,我添加了以下行:

filters.Add(new RequireHttpsAttribute());

但是,导航到网站时,所有功能都可以通过HTTP获得,只有当用户在浏览器的地址栏中明确指定时才能使用HTTPS。

当我的本地版本的应用中出现这行代码时,它会停止工作,我无法再使用HTTP(正如我所料)。

我在Azure上托管应用程序。我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

您可以使用URLRewrite模块完成此操作。 (Download is here

然后,您可以使用web.config中的规则将端口80上的所有请求重定向到https。

<rewrite>
<rule name="Redirect to HTTPS" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTPS}" pattern="^OFF$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
</rule>
</rewrite>

请注意,如果搜索引擎机器人抓取您的网站并且您正在尝试维护您的搜索引擎优化,则可以将redirectType更改为永久。

您可以将此规则添加到Release配置中,以便仅在部署到Azure时强制执行。这样,您可以在开发过程中在端口80上本地运行。

答案 1 :(得分:1)

我在我的一些控制器上使用了AllowAnonymous和OverrideAuthorization属性,这似乎覆盖了我在GlobalFilterCollection中注册的RequireHttpsAttribute。

答案 2 :(得分:0)

确保在csdef中定义了http端点和绑定(除了https端点和绑定)。具体做法是:

<InputEndpoint name="HttpEndpoint" protocol="http" port="80" />

<Binding name="HttpEndpoint" endpointName="HttpEndpoint" />