在我的MVC4移动应用程序中,我有注册、登录页面和其他页面。我想将所有敏感信息页面的用户重定向到HTTPS连接,如注册和登录页面,HTTP重定向页面。
发布于 2014-01-25 06:42:49
我更希望您使用条件功能--将类放到
public class RequireHttpsConditional : RequireHttpsAttribute
{
protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
{
var useSslConfig = ConfigurationManager.AppSettings["UseSSL"];
if (useSslConfig != null)
{
if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
{
throw new InvalidOperationException("The requested resource can only be accessed via SSL.");
}
var request = filterContext.HttpContext.Request;
string url = null;
int sslPort;
if (Int32.TryParse(useSslConfig, out sslPort) && sslPort > 0)
{
url = "https://" + request.Url.Host + request.RawUrl;
if (sslPort != 443)
{
var builder = new UriBuilder(url) { Port = sslPort };
url = builder.Uri.ToString();
}
}
if (sslPort != request.Url.Port)
{
filterContext.Result = new RedirectResult(url);
}
}
}
}并使用这个动作结果上面的[RequireHttpsConditional]。
我在互联网上找到了这段代码,而且对我来说很好。
在web.config应用程序设置中使用<add key="UseSSL" value="443" />
在上述操作结果的控制器中,需要将
[RequireHttpsConditional]
public ActionResult SignIn()
{
}在IIS中,右键单击项目并单击“编辑绑定”,然后添加自定义类型https和端口编号443 (您可以更改它)
注意,这只在生产环境中起作用。当在本地执行时,它将无法工作。
当您在本地执行它时,您将得到request.Url.Host,它将只返回您的localhost并丢失您的端口号。因此,如果您在MVC中使用它,您将发现将此代码放入页面的页面加载错误。
因此,当您分配主机而不是使用带有特定端口号的localhost时,这将起作用。
发布于 2014-01-16 10:41:02
在您希望成为HTTPS的控制器操作中,将以下代码添加到方法的顶部(当然,您可以将其添加到自己的方法中,然后调用它):
if (!HttpContext.Request.IsSecureConnection)
{
var url = new UriBuilder(HttpContext.Request.Url);
url.Scheme = "https";
Response.Redirect(url.Uri.AbsoluteUri);
}不过,建议您在整个站点上保持HTTPS,以防止MITM攻击对auth的攻击。
https://stackoverflow.com/questions/21158800
复制相似问题