ServiceStack フレームワークを使用して CORS REST サービスを作成できるかどうかを知っている人はいますか?
私は何日もの間、WCF REST に頭を悩ませてきましたが、まったく役に立ちません。
ServiceStack フレームワークを使用して CORS REST サービスを作成できるかどうかを知っている人はいますか?
私は何日もの間、WCF REST に頭を悩ませてきましたが、まったく役に立ちません。
CORS ヘッダーを以下のプラグインにラップするCorsFeatureが追加され、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"));
CorsFeature (または手動グローバル ヘッダー) が登録されると、PreRequest フィルターを追加してすべての登録済みグローバル ヘッダー (つまり、CorsFeature のヘッダー) を発行し、すべてのOPTIONS要求を次のように短絡することによって、すべてのOPTION要求に対してCORS を有効にすることをオプションで選択できます。
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;'
});
上記のプラグインを使用する代わりに、ServiceStack では、上記と同じ既定値を持つ[EnableCors] 応答フィルター属性を使用して、サービスごとに CORS を有効にすることもできます。たとえば、上記のように GET、POST のみを有効にするには、次のようにします。
[EnableCors(allowedMethods:"GET,POST")]
public class MyService : Service { ... }
ServiceStackの優れた点は、非常に柔軟でシンプルなコア上に構築されていることです。将来的にどのような新しい HTTP ヘッダー / StatusCode が存在するかを予測することは不可能であるため、すべてに対して厳密に型指定された API を構築しようとはしません。そのため、一般的なタスクを実行するための便利な動作を提供する一方で、必要な HTTP 出力を構成できる柔軟な API も提供します。
これは、AppHost 構成で Cross Origin Sharing をグローバルに有効にする方法です。
public override void Configure(Container container)
{
//Permit modern browsers (e.g. 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" },
},
});
}
これらのヘッダーはすべてのリクエストで送信されます。代わりに、特定の Web サービスに対して有効にすることもできます。つまり、Hello World Web サービスを例にとります。
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" }, }
};
}
}
上記は、すべての HTTP 動詞 (GET、POST など) と組み込みエンドポイント (JSON、XML、JSV、HTML、CSV など) に自動的に接続される Web サービスを開発するために必要なすべての C# コードです。 SOAP 1.1/1.2 - 無料で、設定や摩擦は必要ありません。上記の Web サービスの実例を確認 してください。
上記のエンドポイントに加えて、各サービスは JSONP (Ajax アプリでクロスドメイン サービス呼び出しを有効にするもう 1 つの一般的な方法) によって呼び出すことができ、クエリ文字列に?callback=cbパラメーターを追加するだけで、JSONP 経由で各サービスを呼び出すことができます。 、例:
http://www.servicestack.net/ServiceStack.Hello/servicestack/hello/world?callback=cb
これは、ServiceStack を使用することによる柔軟性と生産性の向上のもう 1 つの例です。この例では、Web サービスに摩擦のない柔軟性と表現の自由が文字通り与えられ、文字通りほぼすべてを返すことができ、期待どおりにシリアル化されます。
WCF よりも使いやすい (すぐに使用できる機能が多い) だけでなく、すべてのコンポーネントが最大のパフォーマンスのために高度に最適化されているため、はるかに高速です。
CORS プラグインがどこにあるのかわかりにくかったので、参考までに。多分私は太っているだけです。
ですServiceStack.ServiceInterface.Cors
。