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