假设一个带有数据库的简单博客,其中的文章维护为:
CREATE TABLE [Articles](
[ArticleId] INT IDENTITY(1,1) NOT NULL,
[ContentURL] NVARCHAR(250) NOT NULL
....
)
通过阅读位于ContentURL
的文件,将文章内容包含在视图中是不错的做法:(特别是,可以通过这种方式缓存文件吗?)
@model Articles
...
<div class="row">
<div class="col-md-8 col-xs-12">
@Html.Raw(File.ReadAllText(Model.ContentURL))
</div>
</div>
或者在控制器中执行此操作并将其作为ViewBag.RawContent
传递会更好吗? ([OutputCache]
属性是否有助于将文件保留在内存中?)
另一方面,如何使用NVARCHAR(MAX)
将原始内容直接存储在数据库中,这是最糟糕的还是最好的做法?
答案 0 :(得分:1)
在回答这个问题时,你必须考虑几件事情:
我们知道File.ReadAllText()
如果找不到该文件,或者该文件已被锁定,或者您不再拥有该文件的权限,则会引发异常。我们也知道,如果View
中有例外,则用户会收到丑陋的错误页面。这些都不可取。
我认为在@Html.Raw(File.ReadAllText(Model.ContentURL))
View
中ViewBag.RawContent
是一个坏主意是安全的。
如果确实发生异常抛出,您需要一种方法来恢复。
您的其他解决方案都能够处理第一颗子弹的问题。它们也都是非常好的解决方案,所以你的项目的答案实际上取决于接下来两个子弹的答案。
gregexpr
非常不错。