C#ASP:NET MVC后端 - 从React Router v4更改HashRouter到BrowserRouter导致刷新404

时间:2017-05-16 13:07:37

标签: c# asp.net-mvc reactjs react-router

我目前正在使用HashRouter并且效果非常好。但是,我希望能够在子路由上使用#以及链接段落。例如/details#Summary。作为一项好处,我还将获得更清晰的网址,如果需要,我可以获得一些SEO

在刷新/直接链接上运行并提供正确的结果。

<HashRouter>
    <App />
</HashRouter>

可以使用但在刷新/直接链接上提供404。

<BrowserRouter>
    <App />
</BrowserRouter>

enter image description here

我知道这里的问题是.Net中的路由,我需要更改它。我需要做什么?我有一个默认路线,但没有被击中。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

2 个答案:

答案 0 :(得分:0)

首先删除上面显示的标准routes.MapRoute,然后添加:

routes.MapRoute("Client", "{*anything}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });

现在任何路线都会呈现您的默认操作。

可选

如果您有一个带属性路由的控制器,例如:

[RoutePrefix("Home")]
public HomeController : Controller {
    //GET Home/Index
    [HttpGet]
    [Route("Index")]
    public ActionResult Index() {
        return View(); 
    }
}

您还需要添加:

routes.MapMvcAttributeRoutes();

答案 1 :(得分:0)

问题在于,当你改变它时,asp.net会不断尝试匹配路线以获取详细信息。

您需要做的是创建一个匹配所有路径的路由,以便返回默认路径,例如:home / index

这是我使用的路线:

routes.MapRoute(
  "Default",
  "{*url}",
  new { controller = "Home", action = "Index" });

这将控制浏览器在&#39; /&#39;

之后计算路径