表单身份验证和XmlDocument.Load

问题描述 投票:0回答:2

我正在使用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_Lo​​gin.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函数起作用,但是,当然,用户可以访问我的所有应用程序页面。

任何人,知道我做错了什么吗?

.net xml asp.net-2.0
2个回答
0
投票
<?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>


0
投票

如果您使用的是表单身份验证,即使您已经登录,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,而无需通过表单身份验证再次登录。

© www.soinside.com 2019 - 2024. All rights reserved.