将VB.net aspx web app中的XML文件保存到文件夹中

时间:2014-06-22 06:13:51

标签: javascript asp.net xml vb.net

我正在寻找以下问题的解决方案:  我有一个aspx / vb Web应用程序。用户可以创建存储在XML文件中的一些自定义内容。我通过回发创建,更新和保存XML到应用程序中的文件夹(不是App_Data,因为我使用javascript来读取xml文件)。当然这在我的机器上测试很好,但是当在服务器上测试它时,我得到了写入权限错误。我四处搜寻。关于文件夹权限的大多数答案都是关于尝试授予Web应用程序本地写入权限。与我相似的几个问题表明允许Web应用程序写入App_Data以外的文件夹是一个安全问题。但是,这对我不起作用,因为我需要JS来读取文件。如果我只是为了从App_Data中读取xml而做回帖,我会有大约5个帖子进行选择(用户通过选择几个下拉列表来过滤课程文档)。

基本上,我可以允许VB应用程序将XML文件写入服务器上的Web应用程序文件夹,以便JS可以读取XML文件吗?顺便说一句,只有经过身份验证才能访问Web应用程序。

另一个选项是将xml文件保存在DB中,然后在加载时将xml写入隐藏的div并使用JS从那里读取它。我不喜欢这个选项,因为这些xml文件中的一些可能会随着时间的推移变大。任何指导都会有所帮助。谢谢

1 个答案:

答案 0 :(得分:2)

从技术上讲,您可以设置权限以便可以写入文件夹,但这不是最安全的选项,我不推荐它。

我会使用通用处理程序(ashx文件)来提供存储在App_Data中的XML文件的内容。然后,您可以通过在处理程序上通过查询字符串参数传递其名称或ID来请求各个fies,例如: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