我正在开发一个我继承的网站,该网站是用 ASP.Net 构建的,我只是稍微熟悉。其中一个页面允许链接到文档(word 或 pdf),单击该链接会提示用户保存或打开文件,但不会显示文件的真实路径。通过这种方式,它可以防止用户将 url 粘贴到文件中 - 该链接指向一个 aspx 文件,该文件检查有效会话,然后检索该文件。
无论如何,因为有很多遗留代码,我还需要使用一堆静态 htm 文件来执行此操作,但是这些文件需要显示而不是提示用户保存它们,这就是现在发生的情况。我尝试将内容类型更改为 application/text、application/html、text/html 等,但没有成功,然后尝试添加 content-disposition inline 的响应标头。当我这样做、构建并尝试链接到文件时,我得到了几个运行时异常:
[FormatException: Input string was not in a correct format.]
Microsoft.VisualBasic.CompilerServices.Conversions.ParseDecimal(String Value, NumberFormatInfo NumberFormat) +206
Microsoft.VisualBasic.CompilerServices.Conversions.ToLong(String Value) +110
[InvalidCastException: Conversion from string "inline; filename=\" + myFile + " to type 'Long' is not valid.]
Microsoft.VisualBasic.CompilerServices.Conversions.ToLong(String Value) +428
cmswebasp.CMSModdoclinks.DownloadFile(String file) +1704
cmswebasp.CMSModdoclinks.Page_Load(Object sender, EventArgs e) +625
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
这是页面中的一段代码:
Response.AddHeader("Content-Disposition", "inline; filename=" & file)
Dim fi As New FileInfo(myFile)
Response.AddHeader("Content-Length", fi.Length)
Dim contentType As String = ""
Dim fileExt As String = file.Split(".")(1)
Select Case fileExt
Case "htm"
contentType = "application/text"
Case Else
contentType = "application/octet-stream"
End Select
Response.ContentType = contentType
Response.WriteFile(myFile)
我是否必须对 htmlwriter 对象或其他东西做些什么?我不能让它打开一个显示文件的新浏览器窗口,或者如果以这种方式使用它是否必须提示用户?