我为使用台式机应用程序的小型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时提供。
答案 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;
}
}