【发布时间】:2019-08-02 13:22:37
【问题描述】:
我是新来的反应,但不是 asp.net 核心应用程序开发。我正在尝试在 Visual Studio 中使用 asp.net core + react 模板创建一个反应应用程序。我正在尝试首先执行 Asp.Net MVC 路由来调用具有 [Authorize] 属性的控制器操作,以确保用户已通过身份验证。我没有任何东西可以在 Asp.Net MVC 视图中显示。一旦用户通过 asp.net mvc 控制器操作进行身份验证,我想立即重定向用户以响应默认路由。是否有任何特定的路由机制来实现这一点。
现在我的应用程序根据路由通过控制器和动作,并在控制器动作定义的视图处停止。我正在尝试了解如何重定向用户现在使用反应路线。我尝试使用 return redirecttoaction 和 returnredirecttoroute 但没有运气。
我的 Asp.Net Core MVC 操作
[Authorize]
public ActionResult Index()
{
var IsAuthenticated = HttpContext.User.Identity.IsAuthenticated;
var UserName = "Guest";
if (IsAuthenticated)
{
UserName = HttpContext.User.Identity.Name;
}
TempData["userName"] = UserName;
//return View();
return Redirect("my react first page");
}
我试过 return Redirect("my react first page");
用于路由的我的启动文件方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseAuthentication();
//MVC Part. I am trying this to authorize as FIRST step
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=DataAccess}/{action=Index}/{id?}");
});
// React part I am trying this to be called once Authentication is done in controller action. Trying to call this as a SECOND step
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
}
如果我进行重定向并强制响应路由,缺少响应路由功能是否会出现任何问题?如果我进行重定向,我看到这个 spa.UseReactDevelopmentServer(npmScript: "start"); 会花费更多时间来显示超时。任何可以将用户重定向到控制器操作的解决方案都可以完成所有授权并使用反应默认路由机制?
是否有任何选项可以先运行反应服务器并进行路由,因为启动服务器需要更多时间导致超时。
注意:我使用 Create-React-App 来创建我的应用程序。
【问题讨论】:
-
MVC 身份验证是服务器端,React 路由是客户端。对于 SPA 和 MVC 后端,您的客户端路由由 react 控制,然后 react 向后端发送请求以请求资源并检查身份验证。如果你想控制对react页面的访问,可以参考Permission checks from components in a React/Redux application
-
你想让两个(reactjs 和 .net core)不同的服务器同时运行吗?
标签: c# reactjs asp.net-core asp.net-core-mvc