无法关闭asp.net 5 MVC 6站点中的requirehttps

时间:2015-12-22 21:30:38

标签: asp.net-core

我正在开发一个asp.net 5 MVC 6网站。我打开需要HTTPS,如下所示:

services.AddMvc(options =>
{
    options.Filters.Add(new RequireHttpsAttribute());
});

它工作得很好,我已经这样做了一段时间。今天我需要关闭它,所以我注释掉了选项过滤器,但它仍然需要HTTPS。

我没有在控制器或操作本身上使用[RequireHttps]属性。

我已进入属性并取消选中“启用SSL”并将http网址粘贴到“启动网址”框中。

我已关闭IIS Express并重新启动该网站。它似乎并不重要,它继续尝试重定向到HTTPS。

IIS Express或Kestral是否可以缓存我需要删除的内容? 任何人都有任何建议,还有什么可能迫使它加入HTTPS?

1 个答案:

答案 0 :(得分:9)

RequireHttpsAttribute实施将永久重定向响应(301)发送回浏览器:

// redirect to HTTPS version of page
filterContext.Result = new RedirectResult(newUrl, permanent: true);

这意味着当您最初启用了该属性并请求了http://localhost:62058/之类的网址时,服务器将回复:

301 (Moved permanently)
Location: https://localhost:62058/

如果您查看301响应代码的definition,您会看到默认情况下浏览器会将其缓存:

  

已为所请求的资源分配了一个新的永久URI和any   以后对此资源的引用应该使用其中一个返回的   的URI。具有链接编辑功能的客户端应该自动进行   将对Request-URI的引用重新链接到一个或多个新的   尽可能由服务器返回的引用。 此回复是   除非另有说明,否则可缓存

     

新的永久URI应该由位置字段给出   响应。除非请求方法是HEAD,否则是实体   响应应该包含一个带有超链接的短超文本注释   新的URI。

删除RequireHttps过滤器后,浏览器仍将使用缓存的响应:

Getting cached redirect to https response

因此,删除RequireHttps过滤器后您需要做的就是重建并清除浏览器缓存!