使用现有.net Web App项目设置Web Api的正确方法

时间:2014-03-06 20:18:57

标签: asp.net asp.net-mvc web-services asp.net-web-api single-page-application

我想通过WebApi 2将现有网站转换为支持REST的SPA。我不希望将服务作为现有项目的一部分,但我希望能够通过JavaScript向我的Web发出请求API层。如果我能使用api.mywebsite.com会很好,但浏览器会阻止跨域请求。

相反,我假设我必须添加一些东西来劫持一条特定的路线,例如:mysite.com/api/*。这样做的正确方法是什么?我似乎无法找到任何谈论做这样的事情的资源。

我正在尝试用单页面应用程序创建这样的东西。我想通过我的客户直接打电话给web api。

.net framework orginization

2 个答案:

答案 0 :(得分:2)

如果您想要分开服务和应用程序,您可以选择以下几种方法:

  1. 使用JSONP。它只支持GET请求。如果您的应用程序偶尔向某些公共api(如twitter)发出GET请求,它可以工作,但对于具有许多Restfull或RPC样式请求的以数据为中心的应用程序来说,它并不好。

  2. 使用CORS。它是一种W3C标准,允许服务器放宽同源策略。使用CORS,服务器可以明确地允许一些跨源请求,同时拒绝其他请求。此选项的一个缺点是它仅支持IE10 +。查看更多CORS browse supportEnabling Cross-Origin Requests in ASP.NET Web API

  3. 将您的应用和服务分开,但将它们托管在同一个域中。

答案 1 :(得分:1)

因此,您在一个域上拥有WebAPI,而在另一个域上拥有单页应用程序。以下是如何从单页JS应用程序调用WebAPI操作的示例。

的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格式显示。