找不到GET的路由/-无法提供默认的index.html

时间:2019-05-30 07:37:59

标签: c# rest grapevine

我为使用台式机应用程序的小型Web服务器的Grapevine为REST api设置了多个路由。该API可以正常工作,其他静态文件也可以正常工作,但是我无法让路由器将空网址:http://:port /路由到指定文件夹中的根index.html文件。

Web是exe路径中的一个文件夹,包含index.html和test.html。

我可以为http://xxx:8080/test.html服务。 http://xxx:8080/给出“找不到用于GET的路由”

网络服务器设置:

        ServerSettings settings = new ServerSettings()
        {
            Host = "*",
            Port = "8080",
            PublicFolder = new PublicFolder("Web")                
        };

        server = new RestServer(settings);
        server.Start();

路线:

    [RestResource]
    public class WebRequestHandler
    {
        [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "/api/v1/live")]
        public IHttpContext Live(IHttpContext context)
        {
            snip
            return context;
        }

        [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "/api/v1/cmd1/[id]")]
        public IHttpContext Cmd1(IHttpContext context)
        {
            return context;
        }

        [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "/api/v1/cmd2/[id]")]
        public IHttpContext Cmd2(IHttpContext context)
        {
            snip
            return context;
        }

        [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "/api/v1/cmd3/[id]")]
        public IHttpContext Cmd3(IHttpContext context)
        {
            snip
            return context;
        }


    }

index.html需要在请求根URL时提供。

2 个答案:

答案 0 :(得分:1)

这有效:

添加处理“ /”的路由并手动返回文件。

非常感谢您的帮助。现在,我可以使用Nuget软件包,而不必担心该库的本地副本被黑。

很棒的图书馆BTW,我差点放弃使用它,因为这些示例和Wiki非常稀疏,我什么都找不到。我坚持很高兴。比弄清楚之后,我所看到的一切都简单得多。

@Bean
public ServletContextInitializer servletContextInitializer() {
    return new ServletContextInitializer() {
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
            servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE));
            SessionCookieConfig sessionCookieConfig = servletContext.getSessionCookieConfig();
            sessionCookieConfig.setHttpOnly(true);
            sessionCookieConfig.setSecure(true);
        }
    };
}

答案 1 :(得分:0)

最新的nuget 4.1.1是否有相同的问题?和github,截至31/5/19

我在这里修改了lib以进行此更改:

protected void AddToDirectoryList(string fullPath)
        {
            DirectoryList[CreateDirectoryListKey(fullPath)] = fullPath;
            if (fullPath.EndsWith($"\\{_indexFileName}"))
            {
                DirectoryList[CreateDirectoryListKey(fullPath.Replace($"\\{_indexFileName}", ""))] = fullPath;
+++             DirectoryList["/"] = fullPath;
            }
        }