我正在使用c#运行asp.net Web应用程序。使用以下内容:-Windows 2003服务器-IIS6.0-.net Framework 2.0.50727
我正在尝试实现表单身份验证,并已在Web.Config文件中输入以下代码:
<authentication mode="Forms">
<forms loginUrl="01_Login.aspx"
name=".ASPXFORMSAUTH"
defaultUrl="02_PendingDoc.aspx"
timeout="120"
path="/"
protection="All"
enableCrossAppRedirects="true">
</forms>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
该登录正在按预期方式工作,除非用户使用有效的用户名和密码登录,否则用户将无法访问01_Login.aspx以外的任何页面。当用户提供正确的登录详细信息时,将执行以下代码:
FormsAuthentication.RedirectFromLoginPage(logLogin.UserName, false);
但是,当用户单击按钮时,将运行以下代码:
//Load xml file into XMLDocument object
XmlDocument xmlDoc = new XmlDocument();
try
{
xmlDoc.Load("SearchConfig.xml");
}
catch (XmlException e)
{
Console.WriteLine(e.Message);
}
上面的xmlDoc.Load函数将失败,并使用以下消息创建XmlException“ {”找不到预期的DTD标记。第5行,位置3。“}”。我也试图注释掉Web.Config文件的以下部分:
<deny users="?"/>
然后xmlDoc.Load函数起作用,但是,当然,用户可以访问我的所有应用程序页面。
任何人,知道我做错了什么吗?
<?xml version="1.0"?>
<BankSearch><SearchColumns>
<Column>
<Name>Bank_Name</Name>
<Control>TextBox</Control>
<Description>Bank Name</Description>
</Column>
</SearchColumns>
<SearchStoredProc Name="usp_BankSearch">
<Parameter1 control="txtBank_Name">@Bank_Name</Parameter1>
</SearchStoredProc>
<DisplayColumns>
<Column HeaderText="Bank Name" HyperLinkColumn="True" NavigateUrl="~/Bank/Bank.aspx" NavigateUrlFields="Bank_Id" QueryStrings="BID">Bank_Name</Column>
<Column HeaderText="Bank Address">Bank_Address</Column>
<Column HeaderText="Bank Email Id">BANK_EMAIL_ID</Column>
<Column HeaderText="Bank Phone">Bank_Phone</Column>
<Column HeaderText="Bank Fax">BANK_FAX_NO</Column>
<Column HeaderText="City">City</Column>
<Column HeaderText="Postal Code">POSTAL_CODE</Column>
<Column HeaderText="State">STATE_NAME</Column>
<Column HeaderText="Country">Country_Name</Column>
</DisplayColumns>
如果您使用的是表单身份验证,即使您已经登录,xmlDocument也会首先进入登录页面。此页面不是xml文件。因此,例外。我看到一个建议可以解决这个问题:
void Main()
{
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;
var x = new XmlDocument();
x.XmlResolver = resolver;
x.Load("https://yourUrl");
}
听起来像是个好建议,但我无法使它正常工作。我将尝试使用Web请求来获取xml。因为当我使用Web浏览器时,返回了xml,而无需通过表单身份验证再次登录。