最近一直在学习Asp.Net MVC,大家都知道可以用System.Web.Routing来解析一段Url,然后到达我们Route规则定下的一个Controller,使用Url Route会使我们的Url看上去更友好一些,比如:
传统:http://www.taogame.com/Display.aspx?id=5
MVC:http://www.taogame.com/Display/5
我们通过在routes.Add添加规则就能达到这样的效果,有点类似于iisrewrite。
不过最近遇到一个问题,但我访问一个长链接时:
http://www.taogame.com/Search/movie-5-1-3-4-12-3123-234-234-23-4-23-42-52345-……(大于255)
这时,我们的这个访问将失败,具体原因不祥,当时老赵用了iisrewrite,解决了这个问题,把一个url请求,先经过iisrewrite,把一个路径转换成了一个QueryString,即解决了这个问题。
可过了几天,又发现一个问题,当链接为:
http://www.taogame.com/Search/movie-5-1-3-4-6-7-8-12-123-14-……(大于260)
这时候,你的访问将返回一个Bad Request的错误信息,由于项目的特殊性,或许我们会遇到这样变态的情况,所以不得不解决,没办法,一点一点开始分析。
问题描述
我们的问题,是通过url请求的时候,我们的url长度过长导致,那应该从这方面着手。
问题分析
会不会是url maxLength Limit呢?因为之前我记得,Url是有这个限制的,在几年前我记得是255的限制,但通过搜索,我终于明白,255的限制是针对客户端的,不是对于我们IIS服务器的。不过我们的Url确实有长度限制,iis6的话,应该是2048个字符,也就是2k的数据,但我们这次的url肯定不会超过2048的,所以应该不是iis的url限制问题。
那会是什么呢?难道是iisrewrite转换后,querystring的长度限制?我进行了以下测试:
http://www.taogame.com/Search.aspx?movie-5-1-3-4-6-7-8-12-123-14-……(大于260)
奇怪了,能够访问,那说明也能排除这个原因了,那是什么原因呢?说明没有进入到iisrewrite,是iis抛出的错误信息。那我们只能手工去确定这个长度了:
http://www.taogame.com/Search/movie-5-1-3-4-6-7-8-12-123-14-……
细心的朋友可能看到我先前一直写了大于260,对的,通过测试,当我们的Url Path 超出260个字符的时候,iis就抛出错误信息了。
我用了Url Path 260 这几个关键字进行搜索,果然国外有很多人提出了这个问题。
解决方案
原因找到了,但是在找解决方案的时候,也费了不少时间,一开始以后只要修改config就万事ok了,但找了很久没有找到相关的配置说明,后来在一个论坛的别人的回复中找到了,问题也顺利解决,真是一波三折啊,所以记录下来,以后就遇到类似问题,就不用大费周章了。
注:修改需要改动注册表,请先备份好你的注册表,以防万一
1、开始-运行-regedit,找到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\HTTP\Parameters项
2、创建一个DWORD值:项:UrlSegmentMaxLength 值:1000(0-32766)就是这个,这个项原先是没有的,需要你创建。
3、依次单击“开始”、“运行”,键入 Cmd,然后单击“确定”。
4、在命令提示符处,键入 net stop http,然后按 Enter。
5、在命令提示符处,键入 net start http,然后按 Enter。
6、在命令提示符处,键入 net stop iisadmin /y,然后按 Enter。
注意:所有依赖 IIS Admin Service 服务的 IIS 服务也将停止。请记下在停止 IIS Admin Service 服务时停止的 IIS 服务。在下一步中,将需要重新启动其中的每项服务。
7、重新启动在步骤 4 中停止的 IIS 服务。为此,请在命令提示符处键入 net startservicename,然后按 Enter。在该命令中,servicename 是要重新启动的服务的名称。例如,要重新启动 World Wide Web Publishing Service 服务,请键入 net start "World Wide Web Publishing Service",然后按 Enter。
好了,再次浏览我们的url,就能顺利访问了。问题解决。
问题解决了,我非常想知道为什么是260个字符限制呢?通过查找,原来是因为windows的物理路径,限制了260个字符,所以默认情况下,url的虚拟路径(斜线内字符)也限定了260.。。。无比晕倒啊,不过好在有解决方案,否则真是欲哭无泪了,当然是可以用其他方法绕开,但这样能完美解决,何乐而不为呢?
PS:此文只是对一个问题的解决方案,或许你现在没有遇到,但我很希望大家收藏一下,因为这个问题如果第一次遇到,真的会花很多时间。附原文解决方案和IIS7解决方案(iis7还没有试过,大家可以试试)
分享到:
相关推荐
标题"JavaScript实现textarea的maxlength"指出,我们将探讨如何使用JavaScript来动态地实现和管理`textarea`的`maxlength`属性。这可能是为了在用户输入时实时检查字符数,或者在用户超过限制时给出反馈。 首先,...
然而,有时候默认的`maxlength`属性功能可能无法满足特定的需求,比如需要更复杂的验证规则或者动态改变最大长度等。这就需要通过JavaScript或jQuery等客户端脚本语言来实现自定义的解决方案。 首先,让我们回顾...
`size`和`maxlength`属性是控制文本框行为的两个关键参数,它们各有不同的作用。 首先,我们来详细了解一下`size`属性。`size`属性用于定义文本输入框在屏幕上的初始宽度,以字符数为单位。例如,如果你设置`size=...
【前端项目-bootstrap-maxlength.zip】是一个前端开发相关的项目,它主要关注的是在用户输入时提供一个视觉反馈,提示用户已输入字符的数量与最大允许输入的字符数的关系。这个项目是基于Bootstrap框架构建的,...
TextBox 在 TextMode 属性设定成 MultiLine, MaxLength无效的解决方法 在Web.config中 將以下片段插入到 <system.web> / <pages> 下即可: <tagMapping> ...
在某些场景下,我们可能希望QTextEdit具有QLineEdit的功能,比如设置占位符文本(setPlaceholderText())和限制输入的最大长度(setMaxLength())。本篇文章将深入探讨如何在QTextEdit中实现这两个功能。 首先,让...
在给定的标题“maxlength list_最长公共子序列_”中,我们可以理解为我们要解决的是找出两个序列间的最长公共子序列,并输出它的长度以及可能的一个实例。 在描述中提到,“寻找连接两个序列的最长公共子序列,并且...
limitReachedClass: 'is-limit-reached', // 达到限制的CSS类 separator: '/', // 分隔符,显示剩余/总字符数 preText: '已输入 ', // 提示前的文字 postText: ' 字符' // 提示后的文字 }); ``` ### 三、...
IE6-9 input和textarea元素的placeholder(占位符)属性与textarea元素的maxlength(最大长度限制)属性的修复与所有浏览器的实时输入捕捉,仅需要提供一个元素或者元素id与实时捕捉回调函数(可选)。甚至实现了各...
MaxLength.java
"Limit-the-input-of-a-text-box.rar_limit"这个压缩包中的内容,很可能是提供了一个小巧的C#程序示例,用于演示如何实现对文本框输入的限制。 首先,让我们了解一些关于限制文本框输入的基本方法: 1. **...
jquery.maxlength.js是一个简洁的jQuery插件,它提供了一种便捷的方式来提示用户输入长度,并可以设置当输入超出限定字符数时如何显示提示信息或进行其他处理。 首先,需要了解的是jquery.maxlength插件可以工作在...