ASP.NET MVC RequireHttps属性不起作用

c# asp.net asp.net-mvc asp.net-mvc-4 azure

1621 观看

4回复

719 作者的声誉

我试图在我的MVC应用程序中的所有地方启用HTTPS。在我的FilterConfig.cs中,我添加了以下行:

filters.Add(new RequireHttpsAttribute());

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

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

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

作者: Adam Drewery 的来源 发布者: 2015 年 3 月 11 日

回应 (4)


1

5647 作者的声誉

您可以使用URLRewrite模块完成此操作。(下载在这里

然后,您可以使用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>

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

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

作者: mgnoonan 发布者: 11.03.2015 05:23

0

11 作者的声誉

确保在csdef中定义了http端点和绑定(除了https端点和绑定)。特别:

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

<Binding name="HttpEndpoint" endpointName="HttpEndpoint" />
作者: user2324268 发布者: 29.02.2016 09:25

1

3374 作者的声誉

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

作者: odyth 发布者: 11.07.2017 09:30

0

3 作者的声誉

我有相同的问题。我写了一个自动重定向http到https的逻辑。自动重定向在第一次从http工作到https但是现在当使用http进行请求时它没有做任何事情。可能它正在进行某种缓存?

我不在Azure上,它只在我的本地机器上。

作者: user3622488 发布者: 03.11.2018 05:00
32x32