找不到 GET 的路由 / - 无法提供默认 index.html
Posted
技术标签:
【中文标题】找不到 GET 的路由 / - 无法提供默认 index.html【英文标题】:Route Not Found For GET / - Can't serve default index.html 【发布时间】:2019-10-15 20:18:11 【问题描述】:我已经为使用 Grapevine 的 REST api 设置了几条路由,用于桌面应用程序中的小型网络服务器。 API 工作正常,其他静态文件工作正常,但我无法让路由器将空 url: 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 时提供服务。
【问题讨论】:
显示你的rest api路由定义 添加了路由定义 您使用的是哪个版本的 Grapevine? @ScottOffen 4.1.1 nuget 和 githib 31/5/19 我发布了一个答案,我破解了一个解决方法。它似乎是chrome会将url作为'/'发送,并且直接列出的根文件夹的键为空。所以它不会匹配 '/' 到 index.html 【参考方案1】:这行得通:
添加处理“/”的路由并手动返回文件。
非常感谢您的帮助。我现在可以使用 Nuget 包,而不必担心 lib 的本地副本被盗。
很棒的库顺便说一句,我几乎放弃使用它,因为示例和 wiki 太稀少了,我想不出任何东西。很庆幸我坚持下来了。比我看到的其他一切都简单得多(在弄清楚之后)。
[RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "/")]
public IHttpContext Root(IHttpContext context)
var filepath = Path.Combine(context.Server.PublicFolder.FolderPath,
context.Server.PublicFolder.IndexFileName);
var lastModified = File.GetLastWriteTimeUtc(filepath).ToString("R");
context.Response.AddHeader("Last-Modified", lastModified);
if (context.Request.Headers.AllKeys.Contains("If-Modified-Since"))
if (context.Request.Headers["If-Modified-Since"].Equals(lastModified))
context.Response.SendResponse(HttpStatusCode.NotModified);
return context;
context.Response.ContentType = ContentType.DEFAULT.FromExtension(filepath);
context.Response.SendResponse(new FileStream(filepath, FileMode.Open));
return context;
【讨论】:
是的,这种方式对我来说感觉很笨拙,所以我把它排除在我(现已删除)的答案之外。我确实需要完成文档。【参考方案2】:最新的 nuget 4.1.1 也有同样的问题?和 github 截至 2019 年 5 月 31 日
我在此处修改了此更改的库:
protected void AddToDirectoryList(string fullPath)
DirectoryList[CreateDirectoryListKey(fullPath)] = fullPath;
if (fullPath.EndsWith($"\\_indexFileName"))
DirectoryList[CreateDirectoryListKey(fullPath.Replace($"\\_indexFileName", ""))] = fullPath;
+++ DirectoryList["/"] = fullPath;
【讨论】:
我删除了我的答案,因为它完全不准确(正如你所指出的)。如果您想提交问题,我可以添加一个可以处理此问题的功能。 谢谢,我会这样做,以便可以对其进行跟踪。感谢您的帮助。以上是关于找不到 GET 的路由 / - 无法提供默认 index.html的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2:找不到“GET /lucky/number”的路由