我最初开始使用的MVC应用程序包含我的JQuery Mobile站点和ServiceStack休息服务。我的获取和帖子都是通过AJAX完成的,一切正常。
我现在将我的服务栈休息服务移动到ASP.NET应用程序,现在我遇到了跨域问题。
我考虑过使用JSONP,但这会解决“获取”但我读到我无法发出“发布”请求(目前对JSONP不太熟悉)。
我想知道我的选择是什么? 我应该
1)只需将AJAX调用回到我的MVC控制器,然后从那里调用我的新REST服务(在带有ServiceStack的ASP.net应用程序中)
2)如果可能的话,找一种进行跨域调用的方法(来自浏览器)。
如果我使用1)是否会有性能影响,因为我现在要访问MVC应用程序,然后调用ASP.NET服务堆栈休息服务。
答案 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启用此功能。使用Nginx和Apache
进行设置也非常简单您可以使用JSONP或启用CORS来发出跨域请求,以下是如何在ServiceStack中执行此操作的方法: