仍然收到“无法识别 URL 意外以...结尾的请求格式”
Posted
技术标签:
【中文标题】仍然收到“无法识别 URL 意外以...结尾的请求格式”【英文标题】:Still getting "Request format is unrecognized for URL unexpectedly ending in..." 【发布时间】:2011-07-24 02:31:53 【问题描述】:您好,
我到处寻找,我看到的每个答案都告诉我将以下内容放入我的 web.config:
<system.web>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
</system.web>
所以我已经这样做了,但我仍然收到错误。
这是我网页上的脚本:
<script>
$(function ()
$('#btn').click(
function ()
CallHome();
);
);
function CallHome()
$.ajax(
type: "POST",
url: "HelloWorld.asmx/HelloWorld",
dataType: "xml",
data: "",
contentType: "xml",
success: function(data)
alert(data);
);
</script>
WebService.vb 是:
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Web.Script.Services
<System.Web.Script.Services.ScriptService()> _
<System.Web.Services.WebService(Namespace:="http://tempuri.org/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class HelloWorld
Inherits System.Web.Services.WebService
<WebMethod()> _
Public Function HelloWorld() As String
Return "Hello World"
End Function
End Class
我创建了一个全新的网络项目,以将我的示例减少到最低限度。我在哪里搞砸了!你能帮忙吗?
谢谢!
更新:对于提琴手来说有点新……但这里是来自 ajax 帖子的标题:
OPTIONS http://localhost:49891/HelloWorld.asmx/HelloWorld HTTP/1.1
Host: localhost:49891
Connection: keep-alive
Access-Control-Request-Method: POST
Origin: null
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (Khtml, like Gecko) Chrome/10.0.648.204 Safari/534.16
Access-Control-Request-Headers: Content-Type, Accept
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
这里是我刚刚发布普通表单时的标题(有效):
POST http://localhost:49891/HelloWorld.asmx/HelloWorld HTTP/1.1
Host: localhost:49891
Connection: keep-alive
Referer: http://localhost:49891/HelloWorld.asmx?op=HelloWorld
Content-Length: 0
Cache-Control: max-age=0
Origin: http://localhost:49891
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
Content-Type: application/x-www-form-urlencoded
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: OriginalGUID=2d9e0303-754d-4871-a875-9e184701e91d
不确定这是否有帮助...
更新 2: 这是来自服务器的错误响应:
HTTP/1.1 500 Internal Server Error
Server: ASP.NET Development Server/10.0.0.0
Date: Mon, 28 Mar 2011 05:06:18 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 4444
Connection: Close
<html>
<head>
<title>Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.</title>
<style>
body font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;
p font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px
b font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px
H1 font-family:"Verdana";font-weight:normal;font-size:18pt;color:red
H2 font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon
pre font-family:"Lucida Console";font-size: .9em
.marker font-weight: bold; color: black;text-decoration: none;
.version color: gray;
.error margin-bottom: 10px;
.expandable text-decoration:underline; font-weight:bold; color:navy; cursor:hand;
</style>
</head>
<body bgcolor="white">
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
<br><br>
<b> Exception Details: </b>System.InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.<br><br>
<b>Source Error:</b> <br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code>
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.</code>
</td>
</tr>
</table>
<br>
<b>Stack Trace:</b> <br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code><pre>
[InvalidOperationException: Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.]
System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response) +518909
System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath) +212
System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated) +47
System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +203
System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +128
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184
</pre></code>
</td>
</tr>
</table>
<br>
<hr width=100% size=1 color=silver>
<b>Version Information:</b> Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1
</font>
</body>
</html>
<!--
[InvalidOperationException]: Request format is unrecognized for URL unexpectedly ending in '/HelloWorld'.
at System.Web.Services.Protocols.WebServiceHandlerFactory.CoreGetHandler(Type type, HttpContext context, HttpRequest request, HttpResponse response)
at System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)
at System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)
at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
-->
【问题讨论】:
请包含完整的错误。 IIS 7?如果是这样,则必须在 web.config 的我一直在寻找解决此问题的方法并找到了这个问题,尽管我会分享我的解决方法/技巧。我在 sharepoint 中使用 asmx Web 服务,并且需要一个 asmx 方法来正确响应 HEAD 请求(显然,iTunes 商店在执行 GET 请求以下载 feed 之前对您的 RSS feed url 做了 HEAD 请求)。通过谷歌搜索,我发现 asmx Web 服务不支持 HEAD 请求,这似乎是正确的http://forums.asp.net/t/1442810.aspx/1
知道 asmx 和 HEAD 不能很好地协同工作,并且我不想重做 WCF 中的所有内容,因此我试图找出阻力最小的 hack。在与团队协商后,我们决定创建一个 HTTP 模块,该模块将查找对 asmx Web 服务的 HEAD 请求,然后继续在服务器上执行 GET 请求并仅返回标头。我知道这有点浪费,但根据我在 CURL/firebug 中的测试,它似乎工作得和我预期的一样好。这是 HTTP 模块的大部分代码。
public class HeadInterceptor : IHttpModule
if (HttpContext.Current.Request.Url.AbsoluteUri.ToLower().Contains("asmx")
&& HttpContext.Current.Request.HttpMethod == "HEAD")
WebRequest req = HttpWebRequest.Create(HttpContext.Current.Request.Url);
req.Method = "GET";
System.Net.WebResponse resp = req.GetResponse();
HttpContext.Current.Response.Clear();
foreach (string k in resp.Headers.AllKeys)
HttpContext.Current.Response.AddHeader(k, resp.Headers[k]);
HttpContext.Current.Response.End();
【讨论】:
【参考方案2】:当您从浏览器点击该服务时,您是否收到“Hello World”?
另外,您是否在网址中缺少尾随“/”?
【讨论】:
是的,当我从浏览器点击服务时,我确实得到了“Hello World”。我尝试了尾随的“/”,但没有效果。【参考方案3】:您的 Web 服务和您的网页是在同一个解决方案中,还是在运行两台服务器?当我的网页在另一台服务器上调用 Web 服务时,我遇到了问题。这会导致 javascript 出现一些权限问题。
如果您在另一台服务器上运行它,您可能必须在包含该网页的解决方案中创建代理 Web 服务。此服务需要在您的其他解决方案中调用 Web 服务。从您的网页调用本地网络服务,该服务会将您的呼叫重定向到另一台服务器上的服务。
【讨论】:
【参考方案4】:我讨厌发布我自己不完全理解的问题的答案,但我最近也遇到了这个问题,我想我会分享我相当奇特的解决方案。 我有一个运行良好几个月的网络服务,突然开始抛出“请求格式无法识别......”异常。该服务已经为 GET 和 POST 协议正确配置,所以这不是问题。我以为可能是另一个队友对 web.config 进行了更改,但事实并非如此。 我偶然遇到的解决方案是在包含导致无效配置错误的 web 服务的文件夹中放置一个新的空 web.config 文件。删除空的 web.config 文件后,webservice 神奇地再次开始工作。我不明白为什么它一开始就坏了,我也不是 100% 清楚为什么会修复它,但它确实发生了。 YMMV!
【讨论】:
您实际上最终做的是回收您的应用程序池。这就是解决问题的方法。不过它可能会再次失败。 @JonathanvandeVeen 我想我在故障排除过程中的某个时间点回收了应用程序池,但是发生这种情况已经很久了,我不记得我采取的初步步骤,所以你可能是对。 @JonathanvandeVeen,如何回收dev中的应用程序池?【参考方案5】:当然,这篇文章对 Dave 来说来得太晚了,但可能对收到此消息的人有用。
我在 Internet Explorer 中测试了一个 Web 服务,但每次我调用一个 Web 服务时它都会从任何地方开始显示此错误。
在我发现我安装了一个名为 Lucky Leap 的不需要的应用程序后进行了一些调试。这会向 Internet Explorer 添加一个触发错误消息的扩展。
我卸载了它(控制面板 -> 程序(或添加/删除程序)-> 卸载程序)并且能够再次调用我的网络服务而没有错误。
希望对你有帮助,
【讨论】:
以上是关于仍然收到“无法识别 URL 意外以...结尾的请求格式”的主要内容,如果未能解决你的问题,请参考以下文章
导入证书后仍然收到 SunCertPathBuilderException
仍然收到 ModuleNotFoundError: No module named 'pandas' ' 尽管安装了 Pandas,anaconda,[关闭]