Servicestackフレームワークを使用してCORS RESTサービスを作成できるかどうかは誰でも知っていますか?
私は今、WCF RESTものに対して数日間私を攻撃してきました-まったく役に立たない。
ありがとう
CorsFeatureを使用して、CORSヘッダーを Plugin にラップし、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(または手動のグローバルヘッダー)が登録されたら、オプションですべてに対してCORSを有効にすることを選択できます[〜#〜]オプション[〜#〜] PreRequestフィルターを追加して、登録されているすべてのグローバルヘッダー(つまり、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;'
});
上記のプラグインを使用する代わりに、ServiceStackでは、[EnableCors]Response Filter属性を使用して、サービスごとにCORSを有効にすることもできます これは上記と同じデフォルトです。例えば。 GETだけを有効にすることができますPOST上記のように:
[EnableCors(allowedMethods:"GET,POST")]
public class MyService : Service { ... }
ServiceStack の優れた点は、非常に柔軟でシンプルなコア上に構築されていることです。将来どのような新しいHTTPヘッダー/ステータスコードが存在するかを予測することは不可能であるため、すべてに対して厳密に型指定されたAPIを構築することは試みません。したがって、一般的なタスクを実行するための便利な動作を提供する一方で、必要なHTTP出力を構成できる柔軟なAPIも提供します。
これは、AppHost構成でクロスオリジン共有をグローバルに有効にする方法です。
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 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" }, }
};
}
}
上記は、すべてのHTTP動詞(GET、POSTなど)および組み込みのエンドポイント(JSON、XML、JSV、HTML、CSVなど)に自動的に接続されるWebサービスを開発するために必要なすべてのC#コードです。 SOAP 1.1/1.2-無料、設定や摩擦は必要ありません。チェックアウト 上記のWebサービスの実際の例 。
上記のエンドポイントに加えて、各サービスはJSONP(Ajaxアプリでクロスドメインサービスコールを有効にするもう1つの一般的な方法)で呼び出すことができます。ここで、各サービスは単に?callback = cbクエリ文字列へのパラメータ、例:
http://www.servicestack.net/ServiceStack.Hello/servicestack/hello/world?callback=cb
これは、ServiceStackを使用した場合の柔軟性と生産性のメリットのもう1つの例です。Webサービスで 文字通りほとんどすべてを返す に文字通り摩擦のない柔軟性と表現の自由が与えられ、期待どおりにシリアル化されます。
WCF(すぐに使用できる機能が多い)よりも使いやすいだけでなく、 すべてのコンポーネントが最大のパフォーマンスを発揮するように高度に最適化されています の場合もはるかに高速です。
CORSプラグインがどこにあるかを理解するのに苦労したので、参考までに。たぶん私はただ厚いです。
入った ServiceStack.ServiceInterface.Cors
。