我正在寻找以下问题的解决方案: 我有一个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文件中的一些可能会随着时间的推移变大。任何指导都会有所帮助。谢谢
答案 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