问题
I'm trying to set a RestPath for root, '/', but its not allowing me to. Its saying RestPath '/' on Type 'MainTasks' is not Valid
Is there a way to allow this? I'd like to provide a resource from the root.
[Route("/", "GET")]
public class MainTasks : IReturn<MainTasksResponse>
{
}
回答1:
You can only match on the Route / Path in ServiceStack with a FallbackRoute, e.g:
[FallbackRoute("/{Path*}")]
public class Fallback
{
public string Path { get; set; }
}
This uses a wildcard to handle every unmatched route (inc. /foo/bar). Only 1 fallback route is allowed.
There are also a few other ways to handle the default root path /:
- Change the
EndpointHostConfig.DefaultRedirectPathto redirect to the service you wish to use - Add a
default.cshtmlRazor or Markdown View or staticdefault.htm(for HTML requests) - Register a
EndpointHostConfig.RawHttpHandlers- This is the first handler looked at in ServiceStack's Order of Operations. - Register a
IAppHost.CatchAllHandlers- This gets called for un-matched requests. - Handle the request in a Global Request Filter
回答2:
This worked for me. I just added the RawHttpHandler and rewrote the request path. Worked like a champ. (This is found in my AppHost's Configure function.)
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);
回答3:
I have been trying to do this and found Christopher Davies method to no longer work in the latest service stack for a self hosted service. The following on my service that takes no parameters worked.
[FallbackRoute("/")]
来源:https://stackoverflow.com/questions/13480673/create-route-for-root-path-with-servicestack