servstack REST API和CORS
任何人都知道是否可以使用servicestack框架来创buildCORS REST服务?
我一直对我对WCF REST的东西抱怨好几天 – 完全没用。
谢谢
使用CorsFeature插件
启用全球CORS支持
我们现在有一个CorsFeature ,它将CORS头文件封装到下面的插件中,以便将CORS支持添加到ServiceStack服务中。
通常这是现在所需要的:
Plugins.Add(new CorsFeature());
其中使用了默认值:
CorsFeature(allowedOrigins:"*", allowedMethods:"GET, POST, PUT, DELETE, OPTIONS", allowedHeaders:"Content-Type", allowCredentials:false);
您可以忽略任何与默认值匹配的值。 例如,如果您只想将允许的方法限制为GET和POST请求,则可以执行以下操作:
Plugins.Add(CorsFeature(allowedMethods:"GET, POST"));
全局启用所有OPTION请求的CORS
一旦注册了CorsFeature(或手动全局标题),您可以select为所有OPTION请求启用CORS,方法是添加PreRequestfilter以发出所有已注册的全局标题(即CorsFeature中的标题),并通过以下方式将所有OPTIONS请求短路:
this.PreRequestFilters.Add((httpReq, httpRes) => { //Handles Request and closes Responses after emitting global HTTP Headers if (httpReq.Method == "OPTIONS") httpRes.EndRequest(); //add a 'using ServiceStack;' });
启用CORS每项服务支持
ServiceStack并不使用上面的插件,还允许您通过使用[EnableCors] 响应filter属性 (具有与上述相同的默认值)在每个服务上启用CORS。 例如,您可以启用只是GET,POST如上:
[EnableCors(allowedMethods:"GET,POST")] public class MyService : Service { ... }
手动启用CORS
ServiceStack的优点在于它build立在一个高度灵活和简单的核心上。 我们不试图build立强types的API,因为不可能预测未来会有什么新的HTTP Headers / StatusCodes存在。 因此,虽然我们提供方便的行为来完成常见的任务,我们还提供了一个灵活的API,让您configuration任何所需的HTTP输出。
设置全局HTTP头
这是如何在您的AppHostconfiguration全球启用交叉来源共享:
public override void Configure(Container container) { //Permit modern browsers (eg Firefox) to allow sending of any REST HTTP Method base.SetConfig(new EndpointHostConfig { GlobalResponseHeaders = { { "Access-Control-Allow-Origin", "*" }, { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" }, { "Access-Control-Allow-Headers", "Content-Type" }, }, }); }
返回服务中的自定义HTTP头
这些头文件将在每个请求中发送,或者您也可以为特定的Web服务启用它,例如以Hello World Web Service为例:
public class Hello { public string Name { get; set; } } public class HelloResponse { public string Result { get; set; } } public class HelloService : IService { public object Any(Hello request) { var dto = new HelloResponse { Result = "Hello, " + request.Name }; return new HttpResult(dto) { Headers = { { "Access-Control-Allow-Origin", "*" }, { "Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS" } { "Access-Control-Allow-Headers", "Content-Type" }, } }; } }
以上是开发Web服务所需的所有C#代码,然后在所有HTTP动词(GET,POST等)和内置端点(即JSON,XML,JSV,HTML,CSV, SOAP 1.1 / 1.2 – 免费,无需任何configuration或摩擦。 检查上述Web服务的实例 。
除了上述端点以外,每个服务都可以通过JSONP调用(在Ajax应用程序中启用跨域服务调用的另一种stream行方式),只需将?callback = cb参数添加到查询string中,即可通过JSONP调用每个服务,例如:
http://www.servicestack.net/ServiceStack.Hello/servicestack/hello/world?callback=cb
这是使用ServiceStack获得灵活性和生产力的另一个例子,在这种情况下,您可以在Web服务中毫不费力地获得无摩擦的灵活性和expression自由,从而几乎可以返回任何内容 ,并按预期方式进行序列化。
它不仅比WCF更易于使用(具有更多function),而且它的所有组件都经过高度优化以获得最佳性能 , 所以速度也更快。
只是供参考,因为我很难找出CORS插件的居住地。 也许我只是很厚。
它在ServiceStack.ServiceInterface.Cors
。
- 如何在完全后台“Microsoft Windows(WIN)”中运行“Oracle VirtualBox(VBOX)”?
- 如何将蓝牙活动转移到服务中
- Ubuntu上的MongoDB不会作为服务启动,日志中没有任何东西
- ServiceStack.Net Redis:存储相关对象与相关对象ID
- 如何让Android服务与Activity进行通信
- java.lang.RuntimeException:Handler(android.os.Handler)将消息发送给死线程上的Handler
- ServiceStack应该是MVC应用程序中的服务层还是应该调用服务层?
- 无法从程序集“System.ServiceModel”加载types“System.ServiceModel.Activation.HttpModule”
- 绑定/取消绑定服务示例(android)