servicestack REST API i CORS

Ktoś wie czy Framework servicestack można wykorzystać do tworzenia usług CORS REST?

Od kilku dni walę haeda z resztą WCF-zupełnie bezużyteczny.

Thanks

Author: Tyson Phalp, 2011-11-21

2 answers

Korzystanie z wtyczki CorsFeature

Włączanie globalnej obsługi Kors

Mamy teraz CorsFeature, który zawija nagłówki CORS do wtyczki poniżej, aby znacznie ułatwić dodanie obsługi CORS do usług ServiceStack.

Powszechnie jest to teraz wszystko, co jest potrzebne:

Plugins.Add(new CorsFeature());

Który używa wartości domyślnych:

CorsFeature(allowedOrigins:"*", 
    allowedMethods:"GET, POST, PUT, DELETE, OPTIONS", 
    allowedHeaders:"Content-Type", 
    allowCredentials:false);

Możesz pominąć dowolną z wartości pasujących do wartości domyślnej. Np. jeśli chcesz ograniczyć dozwolone metody aby po prostu uzyskać i opublikować żądania, możesz po prostu zrobić:

Plugins.Add(CorsFeature(allowedMethods:"GET, POST"));

Globalnie włącz CORS dla wszystkich żądań opcji

Po zarejestrowaniu CorsFeature (lub ręcznych nagłówków globalnych), możesz opcjonalnie włączyć CORS dla wszystkich żądań opcji poprzez dodanie filtru wymagającego, aby emitować wszystkie zarejestrowane nagłówki Globalne (tj. nagłówki w CorsFeature) i zwarć wszystkie opcje żądania z:

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;'
});

Włączenie obsługi Kors per-service

Zamiast korzystając z powyższej wtyczki, ServiceStack pozwala również włączyć CORS na zasadzie poszczególnych usług za pomocą [EnableCors] atrybut filtra Odpowiedzi , który ma takie same wartości domyślne jak powyżej. Np. możesz włączyć just GET, POST jak wyżej za pomocą:

[EnableCors(allowedMethods:"GET,POST")]
public class MyService : Service { ... }

Ręczne włączanie Kors

Piękno ServiceStack polega na tym, że jest zbudowany na bardzo elastycznym i prostym rdzeniu. Nie staramy się budować silnych interfejsów API nad wszystkim, ponieważ nie da się przewidzieć, co nowe nagłówki HTTP / StatusCodes będą istniały w przyszłości. Tak więc, chociaż zapewniamy wygodne zachowanie do wykonywania typowych zadań, zapewniamy również elastyczne API, które pozwala skonfigurować dowolne żądane wyjście HTTP.

Ustawianie globalnych nagłówków HTTP

To jest jak globalnie włączyć Cross Origin Sharing w Twoim apphost config:
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" },
        },
    });
}

Zwracanie niestandardowych nagłówków HTTP w usłudze

Te nagłówki będą wysyłane na każde żądanie, alternatywnie możesz również włączyć je dla niektóre serwisy internetowe, np. Weźmy Hello World Web Service na przykład:

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" }, }
        };
    }
}

Powyższy kod C# jest potrzebny do stworzenia usługi internetowej, która jest automatycznie podłączona do wszystkich czasowników HTTP (GET, POST, etc) i wbudowanych punktów końcowych, tj. JSON, XML, JSV, HTML, CSV, SOAP 1.1/1.2-za darmo, bez żadnych konfiguracji lub tarcia wymagane. Checkout przykład na żywo powyższej usługi internetowej.

Oprócz powyższych punktów końcowych każda usługa jest dostępny do wywołania przez JSONP (inny popularny sposób, aby włączyć połączenia między domenami w aplikacjach Ajax), gdzie każda usługa może być wywołana przez JSONP po prostu dodając ?callback = CB parametr do zapytania, np.:

Http://www.servicestack.net/ServiceStack.Hello/servicestack/hello/world?callback=cb

To kolejny przykład elastyczności i produktywności w korzystaniu z ServiceStack, gdzie dosłownie otrzymujesz elastyczność bez tarcia i ekspresyjna wolność w Twoim serwisie internetowym do dosłownie zwróci prawie wszystko i zostanie serializowana zgodnie z oczekiwaniami.

Jest nie tylko łatwiejszy w użyciu niż WCF (z większą ilością funkcji gotowych do użycia), ale także znacznie szybszy, gdy [72]} wszystkie jego komponenty są wysoce zoptymalizowane pod kątem maksymalnej wydajności[15]}.
 88
Author: mythz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:39

Tak dla twojej wiadomości, ponieważ ciężko mi było dowiedzieć się, gdzie mieszka wtyczka CORS. Może jestem po prostu Gruba.

Jest w ServiceStack.ServiceInterface.Cors.

 7
Author: Tyson Phalp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-12 00:00:30