使用ServiceStack和JsonP重构应用程序

时间:2012-06-11 15:08:15

标签: asp.net-mvc-3 servicestack

我最初开始使用的MVC应用程序包含我的JQuery Mobile站点和ServiceStack休息服务。我的获取和帖子都是通过AJAX完成的,一切正常。

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

如果您对进入跨域路线感兴趣,那么这也是一种选择。在通过jsonp制作跨域的问题上,这篇文章帮助我大大提升了MVC的运行速度:http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

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

答案 1 :(得分:1)

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

使用反向代理

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

如果您要使用代理,那么只需将其配置在本机/顶级反向代理服务器下面,并将所有以/ api开头的路径路由到内部ServiceStack网址,并将所有其他内容路由到您的MVC主机。如果使用IIS,则可以使用IIS Rewrite and Application Request Routing启用此功能。使用NginxApache

进行设置也非常简单

启用跨域请求

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

servicestack REST API and CORS