Кто-нибудь знает, можно ли использовать инфраструктуру servicestack для создания сервисов REST CORS?
Я уже несколько дней стучаю себя по отношению к WCF REST-материалам - совершенно бесполезно.
Спасибо
Кто-нибудь знает, можно ли использовать инфраструктуру servicestack для создания сервисов REST CORS?
Я уже несколько дней стучаю себя по отношению к 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 для всех OPTION запросов, добавив фильтр 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 также позволяет включить CORS для каждой службы с помощью [EnableCors] Атрибут фильтра ответов, который имеет те же значения по умолчанию, что и выше. Например. Вы можете включить GET, POST, как указано выше:
[EnableCors(allowedMethods:"GET,POST")]
public class MyService : Service { ... }
Красота ServiceStack заключается в том, что она построена на очень гибком и простом ядре. Мы не пытаемся создавать строго типизированные API по всему, поскольку невозможно предсказать, какие новые заголовки HTTP/StatusCodes будут существовать в будущем. Поэтому, пока мы обеспечиваем удобное поведение для выполнения общих задач, мы также предоставляем гибкий API, который позволяет настраивать любой желаемый HTTP-выход.
Вот как можно глобально включить Cross Origin Sharing в конфигурацию 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" },
},
});
}
Эти заголовки будут отправляться по каждому запросу, а также вы можете включить его для определенных веб-сервисов, т.е. принять 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, SOAP 1.1/1.2 - бесплатно, без каких-либо настроек или трения. Оформить заказ живой пример вышеуказанной веб-службы.
В дополнение к вышеуказанным конечным точкам каждая услуга доступна для вызова JSONP (другой популярный способ включения межсервисных вызовов службы в приложениях Ajax), где каждая служба может быть вызвана через JSONP, просто добавив обратный вызов ? = cb для запроса, например:
http://www.servicestack.net/ServiceStack.Hello/servicestack/hello/world?callback=cb
Это еще один пример гибкости и производительности при использовании ServiceStack, где вы буквально получаете свободу от трения и выразительную свободу в своем веб-сервисе до буквально возвращаете практически что-либо, и он становится сериализованным, как ожидалось.
Это не только легче использовать, чем WCF (с большим количеством функций из коробки), но и намного быстрее, когда все его компоненты высоко оптимизированный для максимальной производительности.
Просто FYI, так как мне было трудно узнать, где жил плагин CORS. Может быть, я просто толстый.
В ServiceStack.ServiceInterface.Cors
.