Pregunta

¿NancyFX admite ASP.NET MVC como la ruta 'Catch All'?Necesito uno que básicamente coincida con cada URL.Esto es muy útil para crear aplicaciones de una sola página.

¿Es eso posible?

¿Fue útil?

Solución

Sí, usando REGEX

Get[@"/(.*)"] = parameters => {
    return View["viewname", parameters];
};

Pero realmente no lo necesita para construir una aplicación de una sola página con NancyFX: puede usar Get y Publicar con toda su lógica de enrutamiento y aún tener una sola aplicación de página.

Otros consejos

Tested in Nancy version 0.23.2

Get[@"/(.*)"] no funcionó para mí como una ruta general.las rutas "/", "/foo/barra", y las rutas más largas no alcanzarían.Parece que no hay forma de evitar tener que definir un Get["/"] ruta para la URL raíz.Nada más parece captarlo (lo intenté Get["{uri*}"]).Así es como terminé definiendo mis rutas (tenga en cuenta que estoy haciendo esto para una aplicación Angular):

Get["/views/{uri*}"] = _ => { return "A partial view..."; };
Get["/"] =
Get["/{uri*}"] = _ =>
{
    var uri = (string)_.uri;// The captured route
    // If you're using OWIN, you can also get a reference to the captured route with:
    var environment = this.Context.GetOwinEnvironment();// GetOwinEnvironment is in the 'Nancy.Owin' namespace
    var requestPath = (string)environment["owin.RequestPath"];
    return View["views/defaultLayout.html"];
};

Es importante entender Puntuación de patrón.Los patrones de ruta están ponderados; si dos rutas coinciden con el mismo segmento de URL, gana la puntuación más alta.El patrón general está ponderado 0 y aunque el /views/{uri*} El patrón de ruta también es un comodín, comienza con un literal, que está ponderado. 10000, por lo que ganará en todas las rutas que comiencen con /puntos de vista.

Aquí hay más información sobre Accediendo a las variables de entorno de Owin.Tenga en cuenta que los capturados uri variables y requestPath será ligeramente diferente.El requestPath comenzará con un / mientras que el uri la variable no lo hará.Además, si el patrón de ruta coincidente es Get["/"], uri será null y requestPath será "/".

El Puntos de vista La ruta devolverá un archivo html parcial, según la ruta URL, y todas las demás rutas devolverán la página de diseño predeterminada que iniciará el SPA.

Una respuesta actualizada para quien la solución de @synhershko no funciona.Prueba:

Get[@"^(.*)$"] = parameters => {
    return "hi";
};

Esto capturará todas las rutas excepto la página de índice.No estoy seguro de si esto funcionará en el contexto de angular, pero esto funcionó para mí cuando intentara hackear un simple servidor con un solo controlador.

Respuesta proporcionada por @synhershko no funciona para mí.No maneja / de usuario / 2 ni ninguna otra ruta que contenga más segmentos.

ABAJO EL CÓDIGO funciona en mi máquina;):

public class IndexModule : NancyModule
{
    dynamic IndexPage() { return View["Index"]; }

    public IndexModule()
    {
        Get["/"] = _ => { return IndexPage(); };
        Get["/(.*)"] = _ => { return IndexPage(); };
        Get["/(.*)/(.*)"] = _ => { return IndexPage(); };
        Get["/(.*)/(.*)/(.*)"] = _ => { return IndexPage(); };
    }
}

Mi solución no es perfecta, porque no coincide con todo .Repetí tantos '/(.*)' como en mi ruta angular más larga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top