c# - 如何在 MVC3 中使用 RequireHttps 属性指定不同的端口

标签 c# asp.net-mvc-3 ssl https

我刚刚学习 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()
    {
        ...
    }
}

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

但是在我的开发系统上,我的项目在端口 44300 上使用 HTTPS(这是由 Visual Studio 2010 自动配置的),我还没有找到任何方法告诉 MVC 在重定向中使用该端口号,因此它会转至所需的 https://localhost:43300/...

我真的希望这是自动的,因为 SSL 端口号是由 Visual Studio 自动设置的,据我所知,这一定会影响所有在 MVC3 中使用 [RequireHttps] 属性的开发人员。在寻找解决方案的过程中,我看到了一些零散的“变通办法”解决方案,但似乎没有任何解决方案是绝对“正确的方法”。

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

或者,是否有其他完全不同且更好的“正确方法”来在 MVC3 项目中设置 SSL 支持,而不会出现此问题?

最佳答案

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);
}

但是,如果您的整个站点都使用 HTTPS 运行,您只需在 VS 中配置 Web 项目属性(Web -> Start Action -> Start URL)以使用您的端口打开正确的 HTTPS url,而不使用重定向功能本地测试。

关于c# - 如何在 MVC3 中使用 RequireHttps 属性指定不同的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7104703/

相关文章:

c# - MVC3 在 ActionLink OnComplete 事件上触发多个函数?

javascript - MVC3 : Get Drop down menu selected value/text via Javascript

sockets - 如何在 JAVA JSSE 中操作 TLS/SSL 中的握手消息?

ubuntu - 服务器设置 : Subdomain or different port for API and single or multiple ssl certificates for a docker, nginx、web 和 api 设置?

c# - LightSwitch - 使用 FindControl 获取 AutoCompleteBox,在转换时变为 null

python - 如何将 Django 和 .net core 项目连接为单个应用程序?

c# - 存储库模式,共享连接

asp.net - 如何显示表中的所有记录 ASP.NET MVC 3

ssl - 由于使用带有 BrowserMob 代理的 Selenium Webdriver 捕获 har 文件的 SSL 证书,无法加载资源

c# - C++ COM C# 混合模式互操作