man*_*tel 109 c# httpwebrequest
我创建了一个程序,试图在网站上发布一个字符串,我收到此错误:
"服务器提交了协议违规.Section = ResponseStatusLine"
在这行代码之后:
gResponse = (HttpWebResponse)gRequest.GetResponse();
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个异常?
Dar*_*rov 70
试着把它放在你的app/web.config中:
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
</system.net>
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,您也可以尝试将该KeepAlive
属性设置为false.
Iva*_*kin 57
有时,当UserAgent
请求参数为空时会发生此错误(在我的情况下为github.com api).
将此参数设置为自定义非空字符串解决了我的问题.
mar*_*arq 11
另一种可能性:当进行POST时,服务器以100不正确的方式响应100.
这解决了我的问题:
request.ServicePoint.Expect100Continue = false;
Run Code Online (Sandbox Code Playgroud)
调试此方法(并确保它是导致问题的协议违规)的一种方法是使用Fiddler(Http Web代理)并查看是否发生相同的错误.如果没有(即Fiddler为您处理了问题),那么您应该能够使用UseUnsafeHeaderParsing标志来修复它.
如果您正在寻找以编程方式设置此值的方法,请参阅此处的示例:http://o2platform.wordpress.com/2010/10/20/dealing-with-the-server-committed-a-protocol-violation-sectionresponsestatusline /
许多解决方案都在讨论解决方法,但不是关于错误的实际原因.
导致此错误的一个可能原因是,如果Web服务器使用除以外的编码ASCII
或ISO-8859-1
输出标头响应部分.使用的原因ISO-8859-1
是如果Response-Phrase
包含扩展的拉丁字符.
导致此错误的另一个可能原因是,如果Web服务器使用UTF-8
该输出,则输出字节顺序标记(BOM).例如,默认常量Encoding.UTF8
输出BOM,很容易忘记这一点.网页将在Firefox和Chrome中正常运行,但HttpWebRequest
会炸弹:).快速解决方法是更改网络服务器以使用不输出BOM的UTF-8编码,例如new UTF8Encoding(false)
(只要Response-Phrase
包含ASCII字符,但它确实应该使用ASCII
或ISO-8859-1
用于标题,然后UTF-8
或者响应的一些其他编码).
设置期望100继续为false并将套接字空闲时间减少到两秒为我解决了问题
ServicePointManager.Expect100Continue = false;
ServicePointManager. MaxServicePointIdleTime = 2000;
Run Code Online (Sandbox Code Playgroud)
Skype是我问题的主要原因:
当您设置Visual Studio以调试在IIS中运行的现有Web应用程序而不是内置的ASP.NET调试Web服务器时,通常会发生此错误.IIS默认侦听端口80上的Web请求.在这种情况下,另一个应用程序已经在端口80上侦听请求.通常,违规应用程序是Skype,默认情况下在安装时接管侦听端口80和443.Skype已占据80端口.因此IIS无法启动.
要解决此问题,请按以下步骤操作:
Skype - >工具 - >选项 - >高级 - >连接:
取消选中"使用端口80和443作为传入连接的替代方法".
如下所述,一旦完成就执行IIS重置.
归档时间: |
|
查看次数: |
136636 次 |
最近记录: |