我正在寻找一种使用Microsoft.Web.Administration.dll在IIS 7中添加处理程序映射的方法。我可以在ServerManager对象上使用哪种方法吗?
如果通过GUI添加,这些是要遵循的步骤,但同样,我需要以编程方式完成此操作。 http://coderock.net/how-to-create-a-handler-mapping-for-an-asp-net-iis-7-with-application-running-in-integrated-mode/
这是我用来启用ISAPI限制的代码,处理程序映射有类似的东西吗?
public override void AddIsapiAndCgiRestriction(string description, string path, bool isAllowed)
{
using (ServerManager serverManager = new ServerManager())
{
Configuration config = serverManager.GetApplicationHostConfiguration();
ConfigurationSection isapiCgiRestrictionSection = config.GetSection("system.webServer/security/isapiCgiRestriction");
ConfigurationElementCollection isapiCgiRestrictionCollection = isapiCgiRestrictionSection.GetCollection();
ConfigurationElement addElement = isapiCgiRestrictionCollection.CreateElement("add");
addElement["path"] = path;
addElement["allowed"] = isAllowed;
addElement["description"] = description;
isapiCgiRestrictionCollection.Add(addElement);
serverManager.CommitChanges();
}
}
答案 0 :(得分:9)
这是我最终使用的解决方案:
public void AddHandlerMapping(string siteName, string name, string executablePath)
{
using (ServerManager serverManager = new ServerManager())
{
Configuration siteConfig = serverManager.GetApplicationHostConfiguration();
ConfigurationSection handlersSection = siteConfig.GetSection("system.webServer/handlers", siteName);
ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
bool exists = handlersCollection.Any(configurationElement => configurationElement.Attributes["name"].Value.Equals(name));
if (!exists)
{
ConfigurationElement addElement = handlersCollection.CreateElement("add");
addElement["name"] = name;
addElement["path"] = "*";
addElement["verb"] = "*";
addElement["modules"] = "IsapiModule";
addElement["scriptProcessor"] = executablePath;
addElement["resourceType"] = "Unspecified";
addElement["requireAccess"] = "None";
addElement["preCondition"] = "bitness32";
handlersCollection.Add(addElement);
serverManager.CommitChanges();
}
}
}