ServiceStack zwraca 405 na żądanie OPTIONS
Buduję usługę REST za pomocą ServiceStack. Chcę zezwolić na żądania między domenami, więc zarejestrowałem wtyczkę CorsFeature.
Mój AppHost wygląda następująco:
public class HomeAppHost : AppHostHttpListenerBase
{
public Context Context { get; set; }
public HomeAppHost(Context context)
: base("HomeAutomation", typeof(HomeInterfaceService).Assembly)
{
Context = context;
}
public override void Configure(Funq.Container container)
{
Plugins.Add(new CorsFeature());
Routes
.Add<HomeInterface>("/HomeInterface")
.Add<HomeInterface>("/HomeInterface/{Id}")
.Add<ViewModel>("/ViewModel")
.Add<FunctionInput>("/Function")
;
}
}
Następnie, gdy żądanie OPCJE zostanie wysłane do usługi, spowoduje to, że Metoda 405 nie będzie dozwolona:
Żądanie:
OPTIONS /Function HTTP/1.1
Host: localhost:1337
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0 FirePHP/0.7.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Origin: http://localhost
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
x-insight: activate
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Odpowiedź:
HTTP/1.1 405 Method Not Allowed
Content-Length: 1837
Content-Type: application/xml
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 15 Feb 2013 20:19:33 GMT
Edytować
Dodanie pustej metody Opcje do usługi rzeczywiście uniemożliwia uruchomienie 405. Odpowiedź wydaje się jednak pusta:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Server: Microsoft-HTTPAPI/2.0
Date: Sat, 16 Feb 2013 08:44:21 GMT
Dodanie następującego również daje mi pustą odpowiedź:
RequestFilters.Add((httpReq, httpRes, requestDto) =>
{
//Handles Request and closes Responses after emitting global HTTP Headers
if (httpReq.HttpMethod == "OPTIONS")
httpRes.End();
});
Musiałem zmienić httpReq.Method na httpReq.HttpMethod i httpRes.EndServiceStackRequest () na httpRes.End (). Czy to jest poprawne?