如何在MVC3中使用RequireHttps属性指定其他端口

Nev*_*ook 8 c# ssl https asp.net-mvc-3

我刚刚学习ASP.NET MVC,我最近发现[RequireHttps]属性自动重定向GET请求以使用SSL,就像这样......

[RequireHttps] //apply to all actions in controller
public class SomeController 
{
    [RequireHttps] //apply to this action only
    public ActionResult SomeAction()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

使用IIS Express作为开发服务器时,这成功地将请求重定向http://localhost:55945/...https://localhost/....

但是在我的开发系统上,我的项目在端口44300上使用HTTPS(这是由Visual Studio 2010自动配置的),我还没有找到任何方法告诉M​​VC在重定向中使用该端口号,以便它转到https://localhost:43300/...相反的要求.

我真的希望这是自动的,因为Visual Studio会自动设置SSL端口号,据我所知,这必须影响所有使用MVC3中[RequireHttps]属性的开发人员.在我寻找解决方案时,我已经看到了一些不完整的"解决方案"解决方案,但似乎没有任何东西可以肯定是"正确的方法"来解决它.

所以做"正确的方式",我要改变什么(在源代码或我的项目配置中)告诉MVC3中的[RequireHttps]属性使用我的项目配置使用的HTTPS端口?

或者,是否有一些其他完全不同且更好的"正确方法"在MVC3项目中设置SSL支持,这没有这个问题?

Tz_*_*Tz_ 12

RequireHttpsAttribute非常简单,无法进行参数化以重定向到特定端口.如果您真的需要这个,您可以创建一个子类并覆盖HandleNonHttpsRequest方法以不同方式组成重定向URL.

protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) {
    base.HandleNonHttpsRequest(filterContext);

    // redirect to HTTPS version of page
    string url = "https://" + filterContext.HttpContext.Request.Url.Host + ":" + MyConfig.SslPort + filterContext.HttpContext.Request.RawUrl;
    filterContext.Result = new RedirectResult(url);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果整个站点使用HTTPS运行,则只需在VS中配置Web项目属性(Web - >开始操作 - >开始URL),即可使用您的端口打开正确的HTTPS URL,而不使用重定向功能进行本地测试.