我想通过WebApi 2将现有网站转换为支持REST的SPA。我不希望将服务作为现有项目的一部分,但我希望能够通过JavaScript向我的Web发出请求API层。如果我能使用api.mywebsite.com会很好,但浏览器会阻止跨域请求。
相反,我假设我必须添加一些东西来劫持一条特定的路线,例如:mysite.com/api/*。这样做的正确方法是什么?我似乎无法找到任何谈论做这样的事情的资源。
我正在尝试用单页面应用程序创建这样的东西。我想通过我的客户直接打电话给web api。
答案 0 :(得分:2)
如果您想要分开服务和应用程序,您可以选择以下几种方法:
使用JSONP。它只支持GET请求。如果您的应用程序偶尔向某些公共api(如twitter)发出GET请求,它可以工作,但对于具有许多Restfull或RPC样式请求的以数据为中心的应用程序来说,它并不好。
使用CORS。它是一种W3C标准,允许服务器放宽同源策略。使用CORS,服务器可以明确地允许一些跨源请求,同时拒绝其他请求。此选项的一个缺点是它仅支持IE10 +。查看更多CORS browse support。 Enabling Cross-Origin Requests in ASP.NET Web API
将您的应用和服务分开,但将它们托管在同一个域中。
答案 1 :(得分:1)
因此,您在一个域上拥有WebAPI,而在另一个域上拥有单页应用程序。以下是如何从单页JS应用程序调用WebAPI操作的示例。
public Book GetBook(int id)
{
Book book = _repository.Get(id);
if (book == null)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));`
}
return book;
}
以上是您的WebAPI方法。我假设你已经把所有这些都照顾好了。下面是将调用您的API方法的AJAX代码。
$.ajax({
url: 'http://myurl.com/<controllerName>/GetBook',
type: 'GET',
dataType: 'jsonp',
success: function (data) {
alert(data.msg);
}
})
我相信这就是你所需要的一切。您可以使用Fiddler查看数据交换。输出将以JSON格式显示。