1

我最初从一个 MVC 应用程序开始,其中包含我的 JQuery Mobile 站点和我的 ServiceStack 休息服务。我的获取和发布是通过 AJAX 完成的,一切正常。

我现在将我的 servicestack 休息服务移动到 ASP.NET 应用程序,现在我遇到了跨域问题。

我考虑过使用 JSONP,但这会解决“获取”问题,但我读到我无法发出“发布”请求(目前对 JSONP 不太熟悉)。

我想知道我的选择是什么?我是不是该

1) 只需将 AJAX 调用回我的 MVC 控制器,然后从那里调用我的新 REST 服务(在带有 ServiceStack 的 ASP.net 应用程序中)

2)如果可能的话,找到一种进行跨域调用(从浏览器)的方法。

如果我选择 1) 是否会影响性能,因为我现在要去 MVC 应用程序,然后调用 ASP.NET 服务堆栈休息服务。

4

2 回答 2

1

我的投票是选项 1,特别是如果应用程序将托管在同一个网络/域之外。

也就是说,如果您对跨域路由感兴趣,那么这也是一种选择。在通过 jsonp 进行跨域获取方面,这篇文章极大地帮助我启动和运行 MVC:http ://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

跨域 POSTS 有点烦人,因为您需要执行 GET 请求并手动处理任何“GET”参数的序列化。

于 2012-06-11T15:59:58.713 回答
1

如您所知,当您将 ServiceStack 和 MVC 一起托管时,这不是问题,您可以使用ServiceStack.Host.Mvc NuGet pacakge 轻松设置,如SocialBootstrapApi演示中所示。

使用反向代理

我不喜欢选项 1),因为额外的代码样板和开销,您通过 MVC 将所有 HTTP 请求代理到 ServiceStack。

如果您要使用代理,只需将其配置在本机/顶级反向代理服务器下方并将所有以 /api 开头的路径路由到内部 ServiceStack url,其他所有内容都将转到您的 MVC 主机,从而减少开销、代码和清洁度。如果使用 IIS,您可以使用IIS Rewrite 和 Application Request Routing启用此功能。这对于使用NginxApache进行设置也相当简单

启用跨域请求

您可以使用 JSONP 或启用 CORS 来发出跨域请求,以下是在 ServiceStack 中执行此操作的方法:

servicestack REST API 和 CORS

于 2012-06-11T16:49:17.627 回答