我正在使用jQuery的自动完成功能.当我尝试检索超过17000条记录的列表(每条记录的长度不超过10条)时,它超出了长度并抛出错误:
异常信息:
异常类型:InvalidOperationException
异常消息:使用JSON JavaScriptSerializer进行序列化或反序列化时出错.字符串的长度超过maxJsonLength属性上设置的值.
我可以设置无限长度maxJsonLength的web.config?如果没有,我可以设置的最大长度是多少?
我使用了很多ajax调用来查询数据库,我得到大文本(json)响应.我想压缩回复.
在Gzip的JavaScript实现中,有一种使用javascript压缩文本的好方法.
问题是我想在我的aspx服务器上压缩响应并用javascript对其进行解压缩.因此我需要lzw_encode在我的asp.net服务器上运行该函数.II应该将该功能转换为C#还是有另一种方式?
如果您不想配置IIS或更改标题,请使用上面的链接,您可以使用以下命令压缩服务器上的代码:
C#
public static string Compress(string s)
{
var dict = new Dictionary<string, int>();
char[] data = s.ToArray();
var output = new List<char>();
char currChar;
string phrase = data[0].ToString();
int code = 256;
for (var i = 1; i < data.Length; i++){
currChar = data[i];
var temp = phrase + currChar;
if (dict.ContainsKey(temp))
phrase += currChar;
else
{
if (phrase.Length > 1)
output.Add((char)dict[phrase]);
else
output.Add((char)phrase[0]);
dict[phrase + currChar] = code;
code++;
phrase = …Run Code Online (Sandbox Code Playgroud) 我在IIS 7.5上运行的MVC 4应用程序上有一个Telerik MVC UI网格,它可能通过AJAX返回大量JSON数据,极端情况下为800kb或更多.由于有效载荷可能很大,我想GZIP它.对于我的生活,我无法让它发挥作用.
控制器动作是:
public ActionResult _CustomBinding([DataSourceRequest] DataSourceRequest request, SearchMemberModel search)
{
//Do some stuff
return Json(result);
}
Run Code Online (Sandbox Code Playgroud)
提琴手报道:

我确保在IIS中启用了动态和静态压缩:

App Web.Config修正:
<system.webServer>
<serverRuntime frequentHitThreshold="1" frequentHitTimePeriod="10:00:00" />
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="false">
<remove name="FormsAuthentication" />
</modules>
<httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
<scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" />
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
<staticTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="message/*" enabled="true" …Run Code Online (Sandbox Code Playgroud) 我已经看到了向ASP.Net MVC输出添加GZIP/DEFLATE压缩的一些选项,但它们似乎都在运行中应用了压缩...因此不需要缓存压缩内容.
任何启用压缩页面输出缓存的解决方案?优选地,在代码中,使得MVC代码可以检查页面是否已经改变,并且如果不是,则发出预压缩的高速缓存的内容.
这个问题也可以适用于常规的asp.net.
compression asp.net asp.net-mvc http-compression asp.net-mvc-2
我想在我的网站上使用G-ZIP,我用Google搜索了以下代码:
public class CompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var acceptEncoding = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (!string.IsNullOrEmpty(acceptEncoding))
{
acceptEncoding = acceptEncoding.ToLower();
var response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (acceptEncoding.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我将属性设置为Controller或Action时,它工作正常.
[Compress]
public class PostController : Controller
Run Code Online (Sandbox Code Playgroud)
我不想在每一段代码上都这样做,所以我在这里注册了这个属性
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new CompressAttribute());
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行应用程序时,这行代码出现异常:
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
Run Code Online (Sandbox Code Playgroud)
response.Filter为null.
我想知道为什么会这样,以及如何解决这个问题.谢谢! …
我使用以下属性来装饰我的BaseController类.
public class OutputCompressAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string encodingsAccepted = filterContext.HttpContext.Request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(encodingsAccepted))
return;
encodingsAccepted = encodingsAccepted.ToLowerInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (encodingsAccepted.Contains("gzip"))
{
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
}
else if (encodingsAccepted.Contains("deflate"))
{
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,即使这对视图和每个操作结果都很好,该属性也不适用于/Content项目文件夹中的内容.我想知道我是如何做到这一点,以便文件Content夹中的文件使用控制器,或以某种方式绑定或钩住允许我将这些过滤器附加到响应头的东西.