【问题标题】:How to render different content in React based on the route from ASP.NET Core?如何根据来自 ASP.NET Core 的路由在 React 中呈现不同的内容?
【发布时间】:2020-11-03 10:07:54
【问题描述】:

我正在为多家商店开发一个网站。它们的地址如下:https://address/Store1/https://address/Store2/ 等。 我想在后端根据 URL 参数(Store1Store2)进行路由分离,以呈现不同的 React 组件或只是以某种方式将不同的数据返回到前端。

到目前为止我有:

Startup.cs

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "store",
        pattern: "Store/{action=Index}",
        defaults: new { controller = "Store" }
    );

    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller}/{action=Index}/{id?}"
    );
});

StoreController.cs

public ActionResult Index() {
     return Json("Please specify a store");
}

public ActionResult Store1() {
     return View("Store1");
}

public ActionResult Store2() {
     return View("Store2");
}

Store1Store2 是 React 组件(Store1.tsxStore2.tsx)。但在这种情况下,程序期望视图是一个.html/.cshtml 文件。

最后的问题是如何根据来自 ASP.NET Core 的路由在 React 中渲染不同的内容?

【问题讨论】:

  • 您在寻找客户端路由吗?你可以使用各种兼容 React 的路由库来做到这一点。
  • 您可以从页面输出 JavaScript 并通过它更改 React 应用程序的呈现。你可以用一个变量来初始化它,告诉它去哪里。取决于您是否使用路由或其他方式,它会如何完成。
  • @juunas,我想在 ASP.NET 中做路由
  • 这是一个水疗中心,对吗@AN00?
  • @SamiKuhmonen 但是,如果事先不知道将调用哪个操作,您将如何从 StoreController 获取该变量?

标签: c# reactjs asp.net-core routes


【解决方案1】:

好吧,既然这是 SPA,你想错了。

您不能(在任何情况下都不想)让 .net 服务器获取普通的小组件。

您无法避免客户端路由,实际上您正在制作的应用程序应该是一个完整的、仅客户端的基于 react 的 SPA,并在客户端添加了路由。

您遇到的问题是,当您从应用程序中向服务器请求说“/Stores/1”时,例如导航链接,我猜一切都很好,因为所有组件都捆绑在交付的 SPA 应用程序上. 但是,当您尝试共享链接,或直接从新选项卡中点击“www.host.com/stores/1”时,服务器将不知道如何处理它......您的 SPA 从 1 点开始提供,它有 1 个起始状态。

你需要做的,是在客户端应用上添加路由,就像:

“处理 .net 上的路由”应该只意味着“如何处理详细路由,而不是只提供相同的入口点,当有人直接询问 .net 服务器时,而不是从应用程序客户端路由器内部导航(它指示渲染的内容)。

本质上,由于这是一个 SPA,“除了根路线之外的所有路线,都应该提供相同的 SPA,但起始状态不同”。

我最近实现了一个 react 前端,带有一个 .net 核心后端(apis 和 SPA 服务),上面的方法效果很好!

【讨论】:

  • 如果我想从同一页面导航到 Store1 和 Store2,这是有道理的,但我希望能够将它们作为单独的页面访问,正如你所说,直接从新选项卡中点击它们.所以在这种情况下,路由应该在后端完成,不是吗?
  • 不太好……因为我们所说的“路由”就像:rootURL => 返回 app.js 并等待用户 Stores/1 => 返回 app.js,使用javascript端,客户端路由器和push“Stores/1”react-router Some/Other/Uri=>返回app.js,在react-router中有javascript push“Some/Other/Uri”
  • 这是一个简单的想法。如果路由“/”传递 app.js 并等待,那么“Stores/1”的 .net 控制器应该返回相同的 spa,并且只需将路由推送到客户端的路由器中
猜你喜欢
  • 2021-09-11
  • 1970-01-01
  • 2020-02-28
  • 2023-03-13
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
相关资源
最近更新 更多