2012-11-20 3 views
11

Ich versuche, einen RestPath für Root festlegen, '/', aber es erlaubt mir nicht. Sein Sprichwort RestPath '/' on Type 'MainTasks' is not ValidErstellen Sie Route für Root-Pfad, '/', mit ServiceStack

Gibt es eine Möglichkeit, dies zu ermöglichen? Ich möchte eine Ressource von der Wurzel bereitstellen.

[Route("/", "GET")] 
public class MainTasks : IReturn<MainTasksResponse> 
{ 
} 

Antwort

9

Sie können nur in ServiceStack mit einem FallbackRoute, z.B. auf der Strecke / Pfad entsprechen:

[FallbackRoute("/{Path*}")] 
public class Fallback 
{ 
    public string Path { get; set; } 
} 

Dieser verwendet eine Wildcard jede unvergleichliche Strecke zu handhaben (inc/foo/bar.). Nur 1 Fallback-Route ist erlaubt.

Es gibt auch ein paar andere Möglichkeiten, um die Standard-Root-Pfad zu handhaben /:

  1. Ändern Sie den EndpointHostConfig.DefaultRedirectPath des Services
  2. hinzufügen default.cshtml Razor oder Markdown-Ansicht oder statische default.htm nutzen möchten umleiten (für HTML-Anfragen)
  3. Registrieren Sie eine EndpointHostConfig.RawHttpHandlers - Dies ist der erste Handler in ServiceStack's Order of Operations betrachtet.
  4. Registrieren Sie eine IAppHost.CatchAllHandlers - Dies wird für nicht übereinstimmende Anfragen aufgerufen.
  5. Behandeln Sie die Anforderung in einem Global Request Filter
+0

Danke. Sieht so aus, als müsste ich alles von "/ api" veröffentlichen. –

+0

Erstellen von default.htm Weiterleitungen zu http: //localhost/default.htm. Gibt es eine Möglichkeit, es von http: // localhost direkt zu bedienen? –

9

Das ist für mich gearbeitet. Ich habe gerade den RawHttpHandler hinzugefügt und den Anfragepfad neu geschrieben. Arbeitete wie ein Champion. (Dies ist in meiner AppHost configure Funktion gefunden.)

var conf = new EndpointHostConfig(); 
{ 
    DefaultRedirectPath = "/foo", 
    AllowFileExtensions = { { "eot" }, { "svg" }, { "ttf" }, { "woff" } }, 
}; 

conf.RawHttpHandlers.Add(r => 
{ 
    if (r.RawUrl == "/") 
    { 
     HttpContext.Current.RewritePath(conf.DefaultRedirectPath); 
    } 

    return null; 
}); 

this.SetConfig(conf); 
+0

Das ist eine schöne Lösung, danke fürs Teilen! :) – mythz

+0

Das ist in der Tat fantastisch, danke! Ich verwende es, um '/' zu einer ganz anderen URL umzuleiten (die Servicestack-App läuft rein als gesichtsloser API-Endpunkt & '/' leitet jetzt zur API-Dokumentationsseite um) mit '[...] HttpContext.Current.Response. Redirect ("http://somesite.com/api", wahr); [...] '. –

0

Ich habe versucht, dies zu tun und finde Christopher Davies Methode nicht mehr funktioniert in dem aktuellen Service-Stack für einen selbst gehosteten Service. Folgendes auf meinem Dienst, der keine Parameter verarbeitet hat.

[FallbackRoute ("/")]