2014-06-22 76 views
0

我正在尋找解決以下問題的方法: 我有一個aspx/vb web應用程序。用戶可以創建一些存儲在XML文件中的自定義內容。我通過回發到應用程序中的文件夾(而不是App_Data,因爲我使用JavaScript來讀取xml文件)來創建,更新和保存XML。當然這在我的機器上測試很好,但是當它在服務器上測試時,我得到了寫入許可錯誤。我搜查了四周。有關文件夾權限的大多數答案都是關於嘗試賦予Web應用程序本地寫入權限。類似於我的幾個問題表明,允許Web應用程序寫入除App_Data以外的文件夾是一個安全問題。然而,這不適合我,因爲我需要JS來讀取文件。如果爲了從App_Data中讀取xml,我必須做一個回發,我會有大約5個後備選擇(用戶通過從幾個下拉列表中選擇來過濾課程文檔)。將VB.net aspx web應用程序中的XML文件保存到文件夾

基本上,我可以允許VB應用程序將XML文件寫入服務器上的Web應用程序文件夾,以便JS可以讀取XML文件嗎?順便說一下,只有通過身份驗證才能訪問網絡應用程序。

另一種選擇是將xml文件保存在數據庫中,然後在加載時將xml寫入隱藏的div並使用JS從那裏讀取它。我不喜歡這個選項,因爲這些XML文件中的一些可能會隨着時間的推移變大。任何指導都會有所幫助。謝謝

回答

2

從技術上講,您可以設置權限,以便您可以寫入文件夾,但它不是最安全的選項,我不會推薦它。

我將使用通用處理程序(ashx文件)來提供存儲在App_Data中的XML文件的內容。然後,您可以通過查詢字符串參數對處理器通過他們的名字或ID,比如要求各外商投資企業:http://localhost/xmlhandler.ashx?name=myxmlfile

下面是VB.NET的處理程序會從程序App_Data/XMLFolder /服務XML的一個例子:

Imports System.Web 
Imports System.Web.Services 
Imports System.IO 

Public Class XMLHandler 
    Implements System.Web.IHttpHandler 

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 

     context.Response.ContentType = "text/xml" 
     context.Response.Write(ReadXMLFile()) 

    End Sub 

    Private Function ReadXMLFile() As String 
     Try 
      Using sr As New StreamReader(HttpContext.Current.Server.MapPath("~/App_Data/XMLFolder/" & HttpContext.Current.Request.QueryString("name") & ".xml")) 
       Dim line As String 
       line = sr.ReadToEnd() 
       Return line 
      End Using 
     Catch e As Exception 
      Return "The xml file could not be read." 
     End Try 
    End Function 

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable 
     Get 
      Return False 
     End Get 
    End Property 

End Class 
+0

我明白了這一點。問題將是我的JavaScript如何讀取XML文件。 JS無法讀取App_Data文件夾。爲了防止一堆後貼,我需要使用JS Xpath從XML文件中提取所需的數據。 – Cory

+0

您的JavaScript將從處理程序中讀取,而不是直接在App_Data文件夾中訪問xml文件。如果將此處理程序文件放在應用程序的根目錄中,而不是您的JS代碼需要讀取的「http://yourdomainhere/xmlhandler.ashx?name = myxmlfile」,其中「myxmlfile」是存儲在xml文件中的xml文件的名稱「〜/ App_Data/XMLFolder /」文件夾。在某種程度上,這個處理程序是javascript和app_data文件夾中的文件之間的中間人。 – Orilux

+0

啊,對不起,這個很新。所以上面的代碼是aspx.vb頁面的一部分。它是否需要草簽或任何負載。我想我只是不知道它是如何被調用的。負載? – Cory

相關問題