一个解决方案的不同web.configs取决于哪个站点请求

时间:2016-02-01 12:55:51

标签: c# asp.net-mvc forms iis config

在我的Web应用程序中,我想要两种不同的身份验证模式。 Windows 表单

我想要实现的目标:

出于不相关的原因,我需要在IIS中设置两个不同的站点。 一个站点使用Windows身份验证,另一个站点使用Forms。 我希望将网站映射到同一个项目。 唯一的区别应该是web.config文件,只需输入一行:

Web.config 1

  <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
    </authorization>

Web.config 2

WL.JSONStore.destroy()

.then(function () {
  // Handle success.
})

.fail(function (errorObject) {
  // Handle failure.
});

一个简单的解决方案是简单地将两个站点映射到两个相同的项目,包含不同的配置。虽然这可能会导致未来维护方面的问题/困难,因为必须记住要对这两个项目发布新的更改。

如果客户端尝试使用url XXX进入站点1,则应提示Windows Autentication(在浏览器中配置为支持SSO)。如果客户端尝试使用url yyy进入站点2,则应提示他们在表单登录中输入SQL用户的凭据。

如果没有两个完全相同的项目,是否有可能实现我的愿望?

2 个答案:

答案 0 :(得分:1)

使用配置和配置转换。默认情况下,您的站点提供两种配置:调试和发布。但是,您可以添加任意数量的内容。例如,您可以添加“Site1”和“Site2”(Build&gt; Configuration Manager ...)等配置。然后,右键单击Web.config文件并选择“添加配置转换”。如果展开Web.config项,您现在会看到Web.Site1.configWeb.Site2.config。这些是你的变形。使用config transform syntax,您可以自定义每个<authentication>标记。然后,当您发布站点时,只需为要发布的站点版本选择正确的配置。

答案 1 :(得分:0)

假设没有重叠,您可以使用web.config中的位置标记:

  <location path="Some/Path">
    <system.web>
      <authentication mode="Forms" />
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="Another/Path">
    <system.web>
      <authentication mode="Windows" />
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </location>

路径是您的网址XXX和YYY。