gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:13:48 25 4
gpt4 key购买 nike

我刚刚学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com