我正在使用MVC 3 Razor,我正在使用“未知文件类型”获取“另存为”对话框,内容是网站上多个页面上的Html页面,此对话框显示在IE上,在Firefox上,它显示一个错误页面,上面写着“XML解析错误”。
有时当“另存为”出现时,我检查了响应标题,它显示html页面的“Content-type”是“application / xhtml + xml; charset = utf-8”,我没有设置这些标题在服务器端。
问题是,这种情况并非一直发生,它来来往往,而不是在特定的网页上。
我没有在网站上使用任何ajax,而且我也尝试按照其他一些线程重新安装aspnet,我还检查了this thread有关响应标头,但我仍然遇到了这个问题。
注意:我正在使用带有ActionResult的图像控制器将数据库中的图像作为文件返回
Function GetImage(ByVal id As Integer?) As ActionResult
Dim record = rep.GetArticlePhoto(id)
Return MyBase.File(record.ArticlePhotoContent.ToArray, "image/jpeg")
End Function
答案 0 :(得分:2)
事实证明,当你使用
时MyBase.File(img.GetBytes, "image/jpeg")
它将返回FileContentResult
如果您使用
MyBase.File(Server.MapPath("~/content/images/na.png"), "image/png")
它将使用另一个返回不同对象类型的重载,即FilePathResult
不同的重载会返回不同的对象类型 - 这就是我错过的方式
似乎others在FilePathResult上遇到了一些问题,所以我换了它, 现在 它运行正常。
答案 1 :(得分:0)
有时为什么xhtml+xml
的最可能原因是您的页面生成错误并返回默认的.net异常页面。这可能发生,因为当您使用ArticlePhotoContent
或Nothing
.ToArray()
时,record
为Nothing
。
我会像这样修改你的功能。
Function GetImage(ByVal id As Integer?) As ActionResult
Dim record = rep.GetArticlePhoto(id)
If(record IsNot Nothing AndAlso record.ArticlePhotoCount IsNot Nothing) Then
Return MyBase.File(record.ArticlePhotoContent.ToArray, "image/jpeg")
Else
Return New HttpNotFoundResult()
End If
End Function
但是,这并未考虑rep.GreatArticlePhoto
可能导致异常。您可以将其包装在try-catch
块中。