【问题标题】:Is MaxJsonLength safe to always set to max value?MaxJsonLength 始终设置为最大值是否安全?
【发布时间】:2013-05-24 07:50:52
【问题描述】:

我有一个控制器,它返回一个json,它在我的视图中填充网格。根据过滤器,用户可以在一次调用中检索大量数据,因此我将 MaxJsonLength 设置为 ma​​x

var jsonResult = Json(result, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;

我的问题是,始终将MaxJsonLength 设置为最大值是否安全?它的缺点是什么?(如果有的话)

我找到了这个相关的帖子,但它没有回答我的问题。

What is MaxJSONlength good for?

我需要你的专业知识。提前致谢!

【问题讨论】:

    标签: c# json model-view-controller asp.net-ajax


    【解决方案1】:

    我认为在每次通话时将其设置为 MaxValue 并不是一个好主意。这并不意味着它会破坏您的应用程序,但它可能会使您的应用程序看起来损坏。
    我曾经遇到过同样的问题——在某些情况下,用户可能要求更大的数据集。像 10-50 MB 一样大,通过互联网连接,而不是 LAN。没有什么不可能的,你可以发送这样的数据集。但是您的应用程序将非常缓慢。浏览器将等待数据,用户将等待很长时间页面才能使用,这反过来又导致他们做一些愚蠢的事情,比如到处点击、诅咒和报告应用程序中的错误。真的是bug吗?取决于你的要求,但我会说是的。

    您可以而且应该做的是提供分页。向用户发送少量数据,立即显示它们,允许用户使用它们,然后根据需要发送额外的数据。或者,如果总是需要它 - 在后台以包的形式自动发送,但在较小的集合中,这将很快显示出来。用户将很快准备好他们的页面,并且大多数时候他们不会注意到并非所有数据都已经存在 - 到他们需要它时,它已经下载了。
    有了今天对AJAXjQuery 的支持,这样做应该不会比一次获取和显示整个数据集更难。

    【讨论】:

    • 谢谢帕科!但问题是,我的网格列是可定制的。意思是,用户可以将任何相关的列添加到网格中。假设他在网格中添加了所有 30 列,每页检索 20 条记录。即使他只是检索到少量记录,数据流量仍然会很大。
    • 是的,但是取决于您在 htose 列中的数据 - 20 条记录 x 30 列仍然比 200 条记录 x 30 列少很多。关于如何处理这种情况没有完美的答案,但分页是您应该寻找的。您还可以创建一些变体,按需加载列,或在单独的请求中加载更大(如长文本)列的数据,以便快速获得初始数据,并在一两秒后获得长数据(不要忘记放一个微调器或那里的东西)
    • 回去,所以你说如果我将 MaxJsonLength 设置为 max 没有问题,除非它“看起来”坏了?但是在性能方面,只要我没有达到最大限制就不会成为问题?
    • 没有问题,因为它会工作。您甚至可以在 web.config 文件中设置它,这很好。但是您只需要知道它远不是解决问题的好方法,如果您正在尝试创建好的应用程序,您需要寻找更好的解决方案。另外 - 代码没有被破坏并不意味着从用户的角度来看应用程序是正确的。性能将是一个问题 - 您将尝试发送更大的 JSON,需要更长的时间 - 这可能是一个问题。
    猜你喜欢
    • 2011-02-27
    • 1970-01-01
    • 2011-01-19
    • 2014-01-03
    • 1970-01-01
    • 2018-10-16
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多