Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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
Reactjs Azure上的ASP.net核心服务器端重定向问题_Reactjs_Azure_Asp.net Core_Asp.net Core 2.0_React Router V4 - Fatal编程技术网

Reactjs Azure上的ASP.net核心服务器端重定向问题

Reactjs Azure上的ASP.net核心服务器端重定向问题,reactjs,azure,asp.net-core,asp.net-core-2.0,react-router-v4,Reactjs,Azure,Asp.net Core,Asp.net Core 2.0,React Router V4,我使用react路由器构建了一个react.js应用程序,调用ASP.NET core 2.0 restful服务获取数据。我希望任何服务器端404错误只路由到/。我的启动中有app.UseStatusCodePagesWithReExecute/ 在my localhost iis express中放置显式路径时,当按预期输入非法路径时,它会重定向到根目录,如果输入了合法路径,它会实际显示相应的页面 但是,当在Azure上部署此应用程序时,将非法路径或合法路径放在根目录之外会显示此页面: Th

我使用react路由器构建了一个react.js应用程序,调用ASP.NET core 2.0 restful服务获取数据。我希望任何服务器端404错误只路由到/。我的启动中有app.UseStatusCodePagesWithReExecute/

在my localhost iis express中放置显式路径时,当按预期输入非法路径时,它会重定向到根目录,如果输入了合法路径,它会实际显示相应的页面

但是,当在Azure上部署此应用程序时,将非法路径或合法路径放在根目录之外会显示此页面:

The resource you are looking for has been removed, had its name changed, 
or is temporarily unavailable.

我不确定是否需要额外的Azure配置才能像localhost一样工作。如果您有任何想法或建议,我们将不胜感激。

我刚刚部署了这个,没有任何问题,因此我假设您的中间件顺序错误,应该是这样的。验证是否符合此顺序

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseStatusCodePagesWithRedirects("/");
        app.UseDefaultFiles(); //also add this

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
这应该是任何中间件之前的第一步。请注意,这个中间件不会导致浏览器重定向,它只是重写了路径。因此,在浏览器中,您似乎可以访问/sfsdf/sdfsdfsdgfs。这可能是一个问题,因为您正在使用React/sfsdf/sdfsdfsdgfs将由react路由器接收,如果您没有处理该问题的方法,它将一事无成。如果要导致重定向,请替换app.UseStatusCodePagesWithReExecute/并使用

app.UseStatusCodePagesWithRedirects("/");
同样,这应该是您添加的第一个中间件,可以更好地与react路由器配合使用

在重定向中间件之后添加此中间件

 app.UseDefaultFiles();
这个中间件所做的只是查找index.html,它不一定非得是index.html,它还尝试匹配站点/wwwroot文件夹中的其他文件,并在收到请求时提供服务。因此,在站点/wwwroot中有一个index.html页面,用于保存您的应用程序。你可能已经有这个了

您不需要任何虚拟目录来指向/api,也不需要一个虚拟目录来指向react应用程序。因此,您可以同时删除它们

react应用程序将位于站点/wwwroot中的index.html文件中 您的API将驻留在mvc控制器中。我知道你已经这样设置好了

您不需要任何虚拟目录的原因是ASP.NETCore将为您处理所有这些。当您向/ 它将由你的朋友来取

app.UseDefaultFiles();
这将在内部将路径重写为/index.html

然后,静态中间件将获取该请求,并返回包含react应用程序的index.html页面并结束请求


现在假设你向/诸如此类/诸如此类提出请求。这将跳过前两个中间件,并影响MVC。MVC将寻找一条路径。如果它存在,它将返回一些东西。如果没有,它将被顶部的重定向中间件接收。这将导致重定向到/并且整个过程将再次启动。您不需要任何虚拟目录来实现这一点,因此可以删除它们

它是托管在Azure VM上还是AppService上?嗨,Umar,它是作为appserviceHi-Umar部署的。不,我有同样的问题,即使在移动到开始时,我现在切换到重定向。得到同样的错误。我想知道它是否可能是我的appsettings配置。在azure的应用程序设置下,我为虚拟应用程序和目录设置了以下内容:1/api=site\wwwroot 2/=site\wwwroot\wwwroot更新了我的答案。希望此帮助有两个,因为一个用于webapi/api,另一个用于react app/。我不确定我是否能只得到一个答案。啊,我看到我编辑了我的答案,我希望这能让它变得有意义。附带问题,但相关。假设我想继续使用app.UseStatusCodePagesWithReExecute/。它似乎只工作一个子路径深度,例如/sdfsd。如果有两个或两个以上级别,例如/sdsfd/sdfsfd,则会失败。有没有办法让它在任何级别工作?
app.UseDefaultFiles();