Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Blazor服务器页面,参数为;“404未找到”;关于手动刷新_C#_Blazor_Blazor Server Side_Page Refresh - Fatal编程技术网

C# Blazor服务器页面,参数为;“404未找到”;关于手动刷新

C# Blazor服务器页面,参数为;“404未找到”;关于手动刷新,c#,blazor,blazor-server-side,page-refresh,C#,Blazor,Blazor Server Side,Page Refresh,我有一个Blazor服务器应用程序,其中有一个页面,在uri中包含参数。当我点击一个锚定标签,它有路径设置,用params(如下所示)点击该页面时,链接工作正常,页面加载 但是,如果试图直接从该url访问该页面,或在浏览器中手动刷新,则该页面不会重新初始化或在参数上遇到任何断点。相反,它抛出一个404未找到 这里有两件事: 首先,我不明白为什么它在锚定标签中工作得很好,但在其他任何方式下都会消亡。特别是当@page指令中没有参数的页面可以很好地处理刷新/直接URL时 第二,这是Blazor

我有一个Blazor服务器应用程序,其中有一个页面,在uri中包含参数。当我点击一个锚定标签,它有路径设置,用params(如下所示)点击该页面时,链接工作正常,页面加载


但是,如果试图直接从该url访问该页面,或在浏览器中手动刷新,则该页面不会重新初始化或在参数上遇到任何断点。相反,它抛出一个404未找到

这里有两件事:

  • 首先,我不明白为什么它在锚定标签中工作得很好,但在其他任何方式下都会消亡。特别是当
    @page
    指令中没有参数的页面可以很好地处理刷新/直接URL时
  • 第二,这是Blazor服务器的预期行为,还是我遗漏了一些直接破坏页面刷新/点击url的内容?这似乎不是一个功能,但也许我误解了Blazor的路线
Razor和Razor.cs用于相关页面:

@page”/MyPage/{Param1}/{Param2}”
我的网页

编辑--按评论建议

Startup.cs中配置方法的UseEndpoints部分:

 app.UseEndpoints(endpoints =>
            {
                endpoints.MapBlazorHub();
                endpoints.MapFallbackToPage("/_Host");
            });
进一步挖掘之后,我注意到@param2中偶尔会有一个
字符。Blazor确实需要配置具有以下特性的路由。以下回退不起作用:

endpoints.MapFallbackToPage("/MyPage/{Param1}/{Param2}", "/MyPage");
它抛出了一个:
invalidoOperationException:找不到路由值指定的回退端点:{page:/MyPage,area:}。


我猜
区域:
为空是个问题,但我不知道如何或在哪里正确设置它。链接中的示例仅显示回退中的页面名称。有人能指出这个回退有什么问题,以及如何正确地纠正它吗?

我的问题是参数值中有一个点字符。当路由问题来自参数中的“点”时,则完全按照建议执行操作(见图)。您将希望为该特定管线指定一个回退,如下所示:

endpoints.MapFallbackToPage("/MyPage/{Param1}/{Param2}", "/_Host");
对于WASM项目:您希望指定html文件vs_主机,它应该是特定于Blazor服务器的

endpoints.MapFallbackToFile("/MyPage/{Param1}/{Param2}", "index.html");
应用此设置后,刷新页面或直接访问URL将导致应用程序按预期工作,不再出现与
App.razor
中的标准
标记设置不同的404错误

要点:
  • 检查url参数是否有任何已知的解析异常,如点(Blazor假定这些是被请求的文件)
  • 使用应用程序的默认页面作为后备页面,而不是要点击的页面。在wasm的服务器应用程序中,它是
    index.html

跟随链接不会刷新页面。刷新页面意味着它正在加载新URI中的所有内容。这通常通过默认模板在
Startup.cs
中的以下行完成:
endpoints.MapFallbackToFile(“index.html”)首先检查它。@KirkWoll在Startup.cs文件中,我还需要做其他事情吗?另外,我并不是说它们是同一件事,只是页面刷新和直接点击url/uri之间的行为是相同的。此外,我是对你的评论说的,“首先,我不明白为什么它在锚标记中工作得很好”--它与锚定标记配合得很好,因为在这种情况下,页面不会从服务器刷新。哦,我想你已经了解了一些事情。当我在URL中添加句点时,我重新描述了你的行为。@KirkWoll尾部的斜杠似乎没有任何作用,但指定了_主机而不是页面才起作用。谢谢你的帮助!添加“/\u主机”并不能解决我的问题。我正在传递带有几个点的字符串(IP地址)。我所做的是用连字符替换链接中的点,然后在目标页面上替换它们。
endpoints.MapFallbackToFile("/MyPage/{Param1}/{Param2}", "index.html");