servicestack REST API y CORS


¿Alguien sabe si el framework servicestack se puede usar para crear servicios CORS REST?

He estado golpeando mi haed contra el resto de la WCF durante días, completamente inútil.

Gracias

Author: Tyson Phalp, 2011-11-21

2 answers

Usando el plugin CorsFeature

Habilitar el soporte CORS global

Ahora tenemos un CorsFeature que envuelve los encabezados CORS en el Complemento a continuación para que sea mucho más fácil agregar soporte CORS a sus servicios ServiceStack.

Comúnmente esto es ahora todo lo que se necesita:{[16]]}

Plugins.Add(new CorsFeature());

Que utiliza los valores por defecto:

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

Puede omitir cualquiera de los valores que coincidan con el valor predeterminado. Por ejemplo, si solo quería restringir los métodos permitidos para obtener y PUBLICAR solicitudes, solo puede hacer:

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

Habilitar globalmente CORS para todas las solicitudes de OPCIONES

Una vez registrada la CorsFeature (o Encabezados Globales manuales), puede optar por habilitar CORS para todas las solicitudes OPTION agregando un filtro PreRequest para emitir todos los Encabezados Globales registrados (es decir, los Encabezados en CorsFeature) y cortocircuitar todas las solicitudes OPTIONS con:

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

Habilitar el soporte CORS por servicio

En su lugar de usar el complemento anterior, ServiceStack también le permite habilitar CORS por servicio utilizando [EnableCors] Atributo de filtro de respuesta que tiene los mismos valores predeterminados que los anteriores. Por ejemplo, puede habilitar just GET, POST como anteriormente con:

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

Activar manualmente CORS

La belleza de ServiceStack es que está construido sobre un núcleo muy flexible y simple. No tratamos de construir API de tipo fuerte sobre todo, ya que es imposible predecir qué nuevos encabezados HTTP / StatusCodes existirán en el futuro. Por lo tanto, si bien proporcionamos un comportamiento conveniente para realizar tareas comunes, también ofrecemos una API flexible que le permite configurar cualquier salida HTTP deseada.

Establecer Encabezados HTTP Globales

Esta es la forma de habilitar globalmente el Intercambio de Orígenes cruzados en su configuración de 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" },
        },
    });
}

Devolver Encabezados HTTP personalizados en un servicio

Estos encabezados se enviarán en cada solicitud, alternativamente, también puede habilitarlos para servicios web específicos, es decir, tome el Hello World Web Service por ejemplo:

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

Lo anterior es todo el código C# que necesita para desarrollar un servicio web que luego se conecta automáticamente para usted en todos los verbos HTTP (GET, POST, etc.) y endpoints incorporados, es decir, JSON, XML, JSV, HTML, CSV, SOAP 1.1/1.2-de forma gratuita, sin necesidad de configuración o fricción. Checkout el ejemplo en vivo del servicio web anterior.

Además de los puntos finales anteriores, cada servicio está disponible para ser llamado por JSONP (otra forma popular de habilitar llamadas a servicios entre dominios en aplicaciones Ajax) donde cada servicio puede ser llamado a través de JSONP simplemente agregando el ?callback = cb parámetro de la cadena de consultas, por ejemplo:

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

Este es otro ejemplo de las ventajas de flexibilidad y productividad de usar ServiceStack donde literalmente se le da flexibilidad sin fricción y libertad expresiva en su servicio web para devolver literalmente casi cualquier cosa y se serializa como se espera.

No solo es más fácil de usar que WCF (con más características listas para usar), sino que también es mucho más rápido donde todos sus componentes están altamente optimizados para el máximo rendimiento.

 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:39

Solo para tu información, ya que tuve dificultades para averiguar dónde vivía el complemento CORS. Tal vez sólo soy gruesa.

Está en 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-12 00:00:30