我有一个 ASP.NET Web 窗体应用程序,并且在我的 .ASPX 页面之一上有一些 javascript。
在 Javascript 的一部分中,我想调用一个 Web 服务,以便我可以执行服务器端函数并返回 true 或 false 值,然后在 javascript 中我可以根据 true 执行两个操作之一或错误值。
我之前没有做过任何 Web 服务,所以我正在努力将一个简单的值返回给 JS。
我的 WebService (LoginCheck.asmx) 目前看起来像这样:
[System.Web.Script.Services.ScriptService]
public class LoginCheck : System.Web.Services.WebService
{
[WebMethod]
public bool IsLoggedIn()
{
return UserService.IsAuthenticated();
}
}
我的 Javascript 调用当前看起来像这样:
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: "LoginCheck.asmx/IsLoggedIn",
data: "{}",
dataType: "json",
success: function (response) {
if (response) {
alert('Logged in: true');
} else {
alert('Logged in: false');
}
}
});
尽管我的代码中的“IsLoggedIn”Web 服务方法有一个断点,但它永远不会中断。当应该调用网络服务时,我检查了 Google Chrome 中的“控制台”,它显示了以下内容:
“支持以下操作...”,它显示了我的一个“IsLoggedIn”方法,但在此控制台窗口中呈现的所有内容本质上是一个带有 HTML 标记的 HTML 页面。
我似乎从来没有a)打破代码中的断点或b)得到对我的javascript的响应(因此上面代码中显示的js警报都没有发生)。
最佳答案
it's getting a 301 redirect back to the LoginCheck.asmx
我今天也遇到了同样的问题。
您可能在 IIS 的 URLRewrite 2 模块中使用 LowerCaseRule。
您的方法名称是 IsLoggedIn
,因此 LowerCaseRule 尝试调用 isloggedin
,但失败。
您的 LowerCaseRule 应忽略 asmx 文件,如下所示:
<rule name="LowerCaseRule1" stopProcessing="true">
<match url="[A-Z]" ignoreCase="false" />
<conditions>
<add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml)|(asmx))$" ignoreCase="true" negate="true"/>
</conditions>
<action type="Redirect" url="{ToLower:{URL}}" />
</rule>
编辑:我总结了今天的一些经验,发布在这里:http://www.tomot.de/en-us/article/8/asp.net/how-to-use-jquery-to-call-a-webservice-asmx-method
关于jquery - 使用 jQuery 调用 Web 服务以返回简单的 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734654/