使用XMLHttpRequest调用ASP.NET Web服务

时间:2015-08-17 22:08:02

标签: asp.net-web-api xmlhttprequest

我有一个定义为:

的Web服务
reader := decoder.Buffered()

我已将此服务发布到我的localhost,我可以使用浏览器调用并测试它,结果是:

[ScriptService]
public class LoginController : ApiController
{
    [HttpGet]
    [WebMethod]
    public IEnumerable<string> getUsers()
    {
        try
        {
            using (var context = new questionanswerEntities())
            {
                var users = context.users.ToList();
                string[] result = new string[users.Count];

                for (int i = 0; i < users.Count; ++i)
                {
                    user u = users[i];
                    result[i] = u.id + " " + u.name + " " + u.email;
                }

                return result;
            }
        }
        catch (MySqlException ex)
        {
            throw (ex);
        }
        catch (EntityException ex) 
        {
            throw (ex);
        }
    }
}

我需要的是从JavaScript调用此服务。我正在尝试这个:

<ArrayOfstring>
    <string>1 Olcay aaa@aaa.com</string>
    <string>2 Mukaddes aaa@aaa.com</string>
    <string>3 Saduman sadumanertas@gmail.com</string>
    <string>4 Bernam bernella@bb.com</string>
    <string>8 Bernella bernella@gmail.com</string>
    <string>9 Bernella bernella@gmail.com</string>
    <string>10 Bernella bernella@gmail.com</string>
    <string>11 Bernella bernella@gmail.com</string>
    <string>12 Bernella bernella@gmail.com</string>
    <string>13 Bernella bernella@gmail.com</string>
    <string>14 lala loorrrrr@gmail.com</string>
    <string>15 lala loorrrrr@gmail.com</string>
</ArrayOfstring>

但是得到了这个错误:

function callService() {
    var url = "http://localhost:1903/QATest/login/getUsers";
    var xhr = new XMLHttpRequest();
    xhr.open('GET', url, true);
    xhr.setRequestHeader("Content-type", "application/json");
    xhr.onload = function () {
        var response = xhr.responseText;
        console.log("XHR - onload - Result of getUsers: " + response);
        document.getElementById('response').innerHTML = "Response: " + response;
    };
    xhr.onerror = function () {
        console.log("XHR - onerror - Web servis cagirilirken hata olustu!");
    };
    xhr.send();
};

我的ASP.NET服务托管在我的localhost上,客户端代码托管在我的远程主机www.olcayertas.com&#39;。

我做错了什么?

更新

我已将此项目作为ASP.NET Web应用程序启动,然后选择了Web API选项。因此,没有任何asmx文件作为Web服务项目。但Exposing Web Services to Client Script建议在ASP.NET网页的客户端添加以下内容:

XMLHttpRequest cannot load http://localhost:1903/QATest/login/getUsers. Invalid HTTP status code 405 

但我必须使用PHP页面中的JavaScript来调用我的服务。 我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

由于Cross-Origin XMLHttpRequest

您尝试失败的Same-origin policy,因此您被屏蔽了

您需要在本地主机上配置CORS以允许来自www.olcayertas.com&#39;的请求。使用IIS,您可能只需将其添加到web.config;

<add name="Access-Control-Allow-Origin" value="*" />

请注意,因为这会打开您对来自任何域的请求的服务。您应该只允许来自www.olcayertas.com&#39;如果您知道这是您的Web服务的唯一消费者。