在我的MVC4移动应用程序中,我有注册,登录页面和剩余页面。我想将用户重定向到所有敏感信息页面的HTTPS连接,例如注册和登录页面以及HTTP到重新映射页面。
答案 0 :(得分:0)
在您希望成为HTTPS的控制器操作中,将以下代码添加到方法的顶部(当然,您只需将其添加到自己的方法然后调用它):
if (!HttpContext.Request.IsSecureConnection)
{
var url = new UriBuilder(HttpContext.Request.Url);
url.Scheme = "https";
Response.Redirect(url.Uri.AbsoluteUri);
}
建议您在整个网站上保留HTTPS以防止MITM attack针对身份验证Cookie。
答案 1 :(得分:0)
我更喜欢你使用条件功能来放置类
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 appsettings中的使用<add key="UseSSL" value="443" />
并且在操作结果上方的控制器中需要输入
[RequireHttpsConditional]
public ActionResult SignIn()
{
}
在IIS中右键单击并单击“编辑绑定”,然后添加自定义类型https和端口号443(可以更改)
请注意,这仅适用于生产环境。在本地执行时它不会工作。
当您在本地执行时,您request.Url.Host
只会返回localhost
并错过您的端口号。因此,如果您在MVC中使用它,您将找到您放置此代码的页面的错误加载页面。
因此,当您分配主机而不是使用具有特定端口号的localhost时,这将起作用。