让https在asp.net MVC4应用程序中本地工作

时间:2012-12-03 18:15:16

标签: asp.net asp.net-mvc ssl https

我完全按照本教程:

http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

但是当我在本地运行并尝试从非https页面(如home / index)导航到我用[RequireHttps]修饰的页面时,我得到了通用的“SSL连接错误”消息。

我讨厌发布这样一个通用的问题,但你能想到我错过的任何东西吗?它是一个大型的asp.net mvc4应用程序,我在项目中启用了ssl,它显示了ssl url。手动导航到ssl网址也不起作用。

HALP!

注意:在Visual Studio 2012中使用IIS Express

根据评论,我得到的错误是无法建立SSL连接。

3 个答案:

答案 0 :(得分:5)

在本地测试时,您不应该使用Https。我已经创建了自己的Https过滤器,它将忽略localhost中的所有本地流量,并且只能在暂存和实时环境中使用。您可以修改代码以满足您的需要。

public class RequireSSLAttribute : FilterAttribute, IAuthorizationFilter {
    public virtual void OnAuthorization(AuthorizationContext filterContext) {
        if(filterContext == null) {
            throw new ArgumentNullException("filterContext");
        }

        if(!filterContext.HttpContext.Request.IsSecureConnection) {
            HandleNonHttpsRequest(filterContext);
        }
    }

    protected virtual void HandleNonHttpsRequest(AuthorizationContext filterContext) {
        if(filterContext.HttpContext.Request.Url.Host.Contains("localhost")) return;


        if(!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) {
            throw new InvalidOperationException("The requested resource can only be accessed via SSL");
        }

        string url = "https://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl;
        //ignore if the request is from a child action
        if(!filterContext.IsChildAction) {
            filterContext.Result = new RedirectResult(url);
        }
    }
}

这就是你如何使用它......

[RequireSSL(Order=1), Authorize(Order=2)]
public PartialViewResult AccountHeader() {

blah...blah...

}

答案 1 :(得分:4)

我知道它已经回答了,但我想我会指出原始错误的原因,而另一个回答则省略了。

在IIS Express上启用SSL时,您的站点托管在2个端口上,1个用于http,另一个用于https。在Visual Studio中进行调试时,通常会显式指定端口。您网站上的链接可能没有指定端口号,因此当您从普通的http网页链接到https网页时,端口号不会发生变化,您将请求https页面普通的http端口。这就是您收到SSL连接错误的原因。

在真实服务器上,端口号应该是隐式的,因此问题不应该出现,但是您需要确保在本地调试时使用正确的端口。

答案 2 :(得分:3)

您需要将ssl证书添加到IIS中的站点实例。 要创建certifiacte并将其添加到IIS7,请尝试本教程:http://technet.microsoft.com/en-us/library/cc753127(v=ws.10).aspx

创建后,您就可以将其添加到您的网站。在IIS中打开“您的网站” - >绑定 - >添加并添加新的主机头。选择https,端口443并选择创建的sertificate。