2

在 asp.net mvc 3 中,我有一个具有 ssl 证书的站点,并且在 https 中运行得很好。唯一暴露的页面是登录页面。无论出于何种原因,它都不会在 https 中加载。这是我的相关代码(如果我遗漏了一些内容,将根据要求发布更多内容)。

网络配置

<compilation debug="false" targetFramework="4.0">
<authentication mode="Forms">
    <forms loginUrl="~/Account/LogOn" timeout="2880"  requireSSL="true"/>
</authentication>

全球.asax

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }
 );
}

账户控制人

#if !DEBUG
    [RequireHttps]
#endif
public class AccountController : Controller
{
 public ActionResult LogOn()
    {
        return View();
    }
}

当登录视图加载时,它不在 Https 中。我错过了什么?

4

2 回答 2

1

构建站点时,您需要将构建目标设置为发布。您将在 Visual Studio 中看到如下所示的下拉列表,将其更改为发布并重建,然后发布您的站点:

在此处输入图像描述

于 2012-08-10T21:51:50.153 回答
0

您需要添加[RequireHttps],所以它看起来像这样:

[RequireHttps]
public ActionResult LogOn()
{
    return View();
}

这将强制它使用Https.

编辑

也许您需要将以下内容添加到您Web.Config<system.webServer>部分:

<rewrite>
  <rules>
    <rule name="Secure Account Controller" enabled="true" stopProcessing="true">
      <match url="^account" ignoreCase="true" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="true">
        <add input="{HTTPS}" pattern="off" />
        <add input="{HTTP_HOST}" pattern="([^/:]*?):[^/]*?" />
      </conditions>
      <action type="Redirect" url="https://{C:1}:44300{URL}" />
    </rule>
  </rules>
</rewrite>
于 2012-08-10T21:27:06.123 回答