如何向OWIN自托管API发出HTTP GET请求?

时间:2017-01-17 22:51:09

标签: c# jquery asp.net api owin

我是网络开发的新手,但我想为我为工作创建的现有Windows服务应用程序创建一个web api。

我现在的目标是创建一个简单的网络应用程序,其中包含一些文本输入字段,有人可以输入他们的电子邮件并订阅邮件列表。

我被指向使用OWIN在我现有项目中自我托管web api的方向,所以我查看了本指南以便开始:

https://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

本指南显示调用和显示API的控制台应用程序,但我想从Web应用程序执行相同操作。所以我尝试使用带有OWIN的控制台应用程序在“Getting Started with ASP.NET Web Api 2”指南中完成所做的工作。

当我启动我的控制台应用程序时,我可以输入http://localhost:8080/api/values/1并获得<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">value</string>我认为这意味着Web服务器正在运行并响应请求以获取我正在返回的字符串值来自我的ValuesController。

但是我一直在尝试创建一个简单的网页,调用API来获取value,但我无法弄明白。

现在我的index.html在正文中有以下内容:

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
    var uri = "http://localhost:8080/api/values/1";

    $(document).ready(function () {
        $.getJSON(uri)
        .done(function (data) {
            $('#value').text("done");
        })
        .fail(function (jqXHR, textStatus, err) {
            $('#value').text('Error: ' + err);
        });

    });
</script>

我只是在页面上打印Error:。我再次从事网络相关技术的工作,因此我们非常感谢任何指导。

1 个答案:

答案 0 :(得分:0)

好的,按照评论中的讨论(帮助您调试应用程序)。 浏览器中的跨源安全策略限制网页调用存在于不同域上的数据源。域可以是不同的URL,也可以是同一URL的不同端口。

  

http://localhost:80

是来自:

的不同网址/域名
  

http://localhost:81

有两个解决方案,要么利用JSONP,要么使用CORS向api发出请求,JSONP基本上将json数据包装在函数调用中。当api调用返回时,它会执行回调/函数调用,绕过安全限制。 但是,JSONP和CORS都需要服务器支持,这会带来解决方案2 ......

从API中提供您尝试使用的网页,这意味着您从同一个域提供服务,因此没有跨域问题!

很高兴你对它进行了整理,我知道它可能会让网络电话感到沮丧。