环境:Windows Server 2012、IIS8、.Net 4 Web 应用程序。 当我像这样调用 Web 服务(AJAX 调用)时:http://site.com/srv.asmx/getSomething 我的请求被重定向 (302) 到 http://site.com/srv.asmx/getSomething/Default.aspx 而不是调用 getSomething 方法。
有人见过这个吗?就好像 IIS(或框架?)不理解这是对 *.asmx 的请求,而只是附加默认文档。
我收到的确切错误消息:
http://site.com/filenotfound.htm?aspxerrorpath=/srv.asmx/getSomething/default.aspx 错误 404:找不到文件或页面
谢谢!
--- 更新 --- 我自己找到了解决办法
--- 解决方案 ---
此行为是由无扩展 URL 处理程序引起的。 这篇知识库文章对我帮助很大: http://support.microsoft.com/kb/2520479
我还没有尝试安装补丁(也许这是最简单的解决方案)。我刚刚重新安排了处理程序。
对于受影响的站点 applicationHost.config(位于 C:\Windows\System32\inetsrv\config 下)具有以下内容:
<location path="site.com">
<system.webServer>
<handlers>
<clear />
<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
<add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
--- 跳过 ---
如您所见 - ExtensionlessUrl 处理程序(其中之一)列在顶部。这意味着它是第一个有机会处理请求的。所以它很高兴地消耗了我的“无扩展”网络服务调用。
*.asmx 处理程序也在下面,但没有机会被调用。
因此,为了解决此问题,我将 Extensionless URL 处理程序移至底部第二个位置(就在静态文件处理程序前面):
<system.webServer>
<handlers>
<clear />
<add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
--- 跳过 ---
这为我解决了这个问题。
最佳答案
这可能是您使用 FormAuthentication
并尝试在未登录的情况下访问该服务的原因。
您可以在这种情况下使用位置路径
<location path="srv.asmx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
关于asp.net - Web 服务调用 (asmx) 重定向到 default.aspx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15612036/