Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据哪个站点请求,为一个解决方案配置不同的web.config_C#_Asp.net Mvc_Forms_Iis_Config - Fatal编程技术网

C# 根据哪个站点请求,为一个解决方案配置不同的web.config

C# 根据哪个站点请求,为一个解决方案配置不同的web.config,c#,asp.net-mvc,forms,iis,config,C#,Asp.net Mvc,Forms,Iis,Config,在我的web应用程序中,我需要两种不同的身份验证模式。 窗口和窗体 我正在努力实现的目标: 由于不相关的原因,我需要在IIS中设置两个不同的站点。 一个站点正在使用Windows身份验证,另一个站点正在使用表单。 我希望这些网站被映射到同一个项目。 唯一的区别应该是web.config文件,只需写一行: Web.config 1 <authentication mode="Forms" /> <authorization> <deny users

在我的web应用程序中,我需要两种不同的身份验证模式。 窗口和窗体

我正在努力实现的目标:

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

Web.config 1

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

Web.config 2

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

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

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


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

假设没有重叠,您可以在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>


其中路径是url XXX和YYY。

使用配置和配置转换。默认情况下,您的站点提供两种配置:调试和发布。但是,您可以添加任意数量的内容。例如,您可以添加类似“Site1”和“Site2”的配置(构建>配置管理器…)。然后,右键单击Web.config文件并选择“添加配置转换”。如果展开
Web.config
项,现在将看到
Web.Site1.config
Web.Site2.config
。这些是你的变换。使用,您可以自定义每个的
标记。然后,当您发布站点时,只需为您发布的站点版本选择正确的配置。

您所说的“假定没有重叠”是什么意思?我试过这种方法。但是得到一个错误,上面写着“在应用程序级别之外使用注册为allowDefinition='MachineToApplication'的节是错误的”。如果路径XXX和YYY是完全独立的。是的,它们是完全独立的。你在最后一句话中失去了我。如果在仅发布时必须选择正确的配置,比如选择“Web.Site1.config”,那么发布的解决方案将只包含该解决方案中的配置?不是两者都有。还是我遗漏了什么?发布时,必须选择一个配置。通常,这是调试或发布。但是,如果添加其他配置,则也可以从这些配置中进行选择,即本例中的Site1和Site2。当您选择一个配置时,该配置转换将应用于实际的Web.config,然后发布转换后的Web.config。我理解您的意思,但我认为您误解了我的意思。您建议的是一种在开发和实时站点设置之间切换的简单方法。我想要的是在发布时同时提供两种不同的配置。简单地说:如果客户端在其windows计算机上进入网站,它将自动使用site1.config中的设置,否则它们将使用site2.config。这是不可能的。Web.config是基于应用程序的,而不是基于用户的。您不能按用户切换,因为这需要重新启动整个web应用程序。你所能做的就是发布两个不同的网站。如果设置正确,您甚至可以在内部和外部分别拥有到一台服务器和另一台服务器的域路由,因此,如果用户进入intranet,他们将获得Windows Auth版本。这是你能做的最好的了。