如何以编程方式更改web.config文件中的自定义错误模式?我需要更改以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections />
...
<system.web>
....
<customErrors mode="RemoteOnly">
<error statusCode="404" redirect="~/errors/404" />
</customErrors>
要
<customErrors mode="off">
<error statusCode="404" redirect="~/errors/404" />
</customErrors>
有人对此有任何想法吗?
更新
作为 CoDe aDDict 回答,我尝试使用它:
Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
CustomErrorsSection CustomErrorsection = (CustomErrorsSection)config.GetSection("system.web/customErrors");
CustomErrorsection.Mode = CustomErrorsMode.Off;
config.Save();
但有一个例外:
Access to the path 'D:\Projects\MyProject\web.config' is denied.
答案 0 :(得分:3)
I found an example some days ago which change alot in custom error configration
public static void ConfigureCustomErrors()
{
Configuration config =
WebConfigurationManager.OpenWebConfiguration("~");
CustomErrorsSection section =
(CustomErrorsSection)config.GetSection(
"system.web/customErrors");
//Verify that customErrors exists in web.config
if (section != null)
{
//Only configure if customErrors is enabled
if (section.Mode != CustomErrorsMode.Off)
{
if(!section.IsReadOnly() &&
!section.SectionInformation.IsLocked)
{
//Collection of new redirects to add to
//the customErrors element
CustomErrorCollection redirectsToAdd =
new CustomErrorCollection();
//Page ID of the page to be used for
//custom error redirects
int redirectPageId = 0;
//Get existing redirects, if any
CustomError redirect404 =
section.Errors["404"];
CustomError redirect500 =
section.Errors["500"];
//Get URL for 404 redirects
int.TryParse(
ConfigurationManager.AppSettings[
"FileNotFoundPageId"],
out redirectPageId);
string fileNotFoundURL =
ToolBox.GetSimpleAddress(
DataFactory.Instance.GetPage(
new PageReference(redirectPageId));
//Get URL for server error redirects
int.TryParse(
ConfigurationManager.AppSettings[
"GenericErrorPageId"],
out redirectPageId);
string serverErrorURL =
ToolBox.GetSimpleAddress(
DataFactory.Instance.GetPage(
new PageReference(redirectPageId)));
//If the 404 redirect hasn't been
//specified or if its redirect
//URL is invalid
if (fileNotFoundURL!=string.Empty &&
(redirect404 == null ||
redirect404.Redirect!=
fileNotFoundURL))
{
//Add new
if (redirect404 == null)
{
CustomError fileNotFoundError =
new CustomError(404,
fileNotFoundURL);
redirectsToAdd.Add(
fileNotFoundError);
}
else //Modify existing
{
redirect404.Redirect =
fileNotFoundURL;
}
}
//If the 500 redirect hasn't been
//specified or if its redirect
//URL is invalid
if (fileNotFoundURL != string.Empty &&
(redirect500 == null ||
redirect500.Redirect !=
fileNotFoundURL))
{
//Add new
if (redirect500 == null)
{
CustomError serverError =
new CustomError(500,
serverErrorURL);
redirectsToAdd.Add(serverError);
}
else //Modify existing redirect
{
redirect500.Redirect =
serverErrorURL;
}
}
//Add any new redirects
foreach (
CustomError redirectToAdd in
redirectsToAdd)
{
section.Errors.Add(redirectToAdd);
}
//Save web.config if its
//contents have changed
config.Save();
}
}
}
}
答案 1 :(得分:0)
为了更新您的web.config文件,运行您的应用程序池的进程/标识需要具有对web.config文件的修改(写入)访问权限。您收到错误,因为您的应用程序没有写入web.config文件的权限。添加适当的权限,已声明的内容将毫无例外地起作用。现在就说......
<强>声明强>
配置文件驱动您的应用程序,具有应用程序中路径的身份验证/授权信息,用于编码/解码身份验证票证的机器密钥(可能),SQL连接字符串等。您的应用程序可以写入此文件可能是令人讨厌的安全问题。我做了免责声明。小心:)