【问题标题】:How to set start page in dotnet core web api?如何在 dotnet core web api 中设置起始页?
【发布时间】:2017-03-31 12:26:04
【问题描述】:

我尝试使用 dotnet core web api 构建一个 web 应用程序,但我不知道如何将 index.html 设置为起始页,这可以通过 dotnet framework web api 轻松完成。我尝试使用app.UseDefaultFiles();app.UseStaticFiles(); 来解决这个问题,但是没有成功。

【问题讨论】:

  • index.html 在哪里?在 wwwroot 文件夹或项目根目录?
  • @ademcaglin wwwroot.i 通过在浏览器中键入正确的 url 解决了这个问题。当我启动应用程序时,浏览器将以 ip:portnumber/api/values 之类的 url 开头,我忽略了它.just app.UseDefaultFiles();app.UseStaticFiles();没问题。

标签: asp.net-web-api asp.net-core .net-core


【解决方案1】:

Properties/launchSettings.json 中,您可以定义launchUrl

"profiles": {
    "IIS Express": {
        "commandName": "IISExpress",
        "launchBrowser": true,
        "launchUrl": "<your relative URL here>",
        "environmentVariables": {
            "ASPNETCORE_ENVIRONMENT": "Development"
        }
    }
}

【讨论】:

  • 这有效,但不是我需要的方式:它实际上将您重定向到不同的 URL,而不是使“mysite.com/page1”==“mysite.com”。因此,当您浏览“mysite.com”时,您将被重定向到“mysite.com/page1”。我想要的是向用户显示 page1,但仍然在他们的浏览器上显示“mysite.com”。
  • 嘿@demonicdaron,听起来你需要属性路由。见这里:docs.microsoft.com/en-us/aspnet/core/mvc/controllers/…
  • 我建议添加:launchSettings.json 可以在 Properties 文件夹中找到。
  • 不错的简单答案! +1
【解决方案2】:

第 1 步

app.UseDefaultFiles();
app.UseStaticFiles();

第 2 步

创建一个名为“wwwroot”的文件夹。放一个名为 index.html 的文件

第 3 步(可选)

如果您正在使用自动生成的模板,您可以像这样删除将launchUrl设为空白

"launchUrl": "",

否则,在 localhost 运行期间,您每次都必须手动继续进入登录页面。

这是正确的方法。但总是在UseStaticFiles 之前使用UseDefaultFiles() 否则将无法正常工作。

供参考:Core fundamentals of Static Files

【讨论】:

  • 这两行加上 index.html 文件的 wwwroot 文件夹就像一个魅力。
【解决方案3】:

如果您使用静态文件作为默认页面,以下代码可以帮助您。

 app.UseDefaultFiles(new DefaultFilesOptions { DefaultFileNames = new 
     List<string> { "index.html" } });

如果您使用的是 MVC 视图,只需添加路由角色即可。

app.UseMvc(routes =>
   {
       routes.MapRoute(
           name: "default",
           template: "{controller=Home}/{action=Index}");
   });

【讨论】:

  • 这需要在 Startup.cs => Configure() 方法中完成。
  • 我尝试按照上面的建议使用 MapRoute,但没有效果。我尝试了@Floris 的回答并工作,但不是按照我需要的方式:它实际上将您重定向到不同的 URL,而不是让“mysite.com/page1”==“mysite.com”,这是我所期望的MapRoute 要做。
  • @demonicdaron,如果你想要一个静态文件作为起始页面,你需要将文件放入 wwwroot 目录,例如,如果我想将 index.html 设置为起始页面,只需将 index.html 放入 wwwroot并添加如上所述的代码。如果你想设置一个控制器作为起始页,只需修改路由模板。
  • 我在 Pages/ 下有几个子文件夹,并希望站点默认为这些文件夹的索引页面之一,而不将该索引页面移出其文件夹。这有可能吗?或者我必须不惜一切代价将默认页面从其文件夹中移到 wwwroot 文件夹中?
  • 看来您使用的是asp.net core 2.1 web应用程序,并使用新样式的cshtml视图,只需在Pages中添加文件夹,并将cshtml文件重命名为Forder中的Index。顺便说一句 app.UseDefaultFiles 在这种风格的 mvc 项目中似乎不起作用。
【解决方案4】:

对于 Asp.Net Core 2.0/2.1/2.2 只需右键单击项目 → 属性 → 调试 并在 Launch Browser 复选框旁边设置您想要的启动页面的路径。

【讨论】:

  • 这被设置为在 Visual Studio 中创建项目时的默认 API,这意味着提到的其他解决方案都不起作用,但确实如此,谢谢!
【解决方案5】:

您的 index.html 文件必须在 wwwroot 文件夹中

wwwroot / index.html

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files

【讨论】:

  • 这个问题在一年前就有了一个公认的答案。你确定你的答案是相关的吗?
  • 这很有帮助。我正在使用 ASP.NET Core 3.1。我尝试了接受的答案和以上所有高票的答案,没有一个有效。仅当静态文件位于 wwwroot 文件夹中时,这些答案才有效。此答案与问题相关。
  • 基本上我们需要的是app.UseDefaultFiles();app.UseStaticFiles();,如@sebulbamalastare 答案和index.html 文件夹中的index.html 文件。
  • 我的 asp.net core 3.1 flutter index.html 无法访问。我添加了 DefaultFilesOptions options = new DefaultFilesOptions(); options.DefaultFileNames.Clear(); options.DefaultFileNames.Add("Views/index.html"); app.UseDefaultFiles(选项); app.UseStaticFiles(); app.UseRouting();并清除启动浏览器 url - 错误 no localhost page can't be found
  • 我必须将我所有的 Flutter Web 构建文件复制到 wwwroot,然后 javascript 才能工作。
【解决方案6】:

您可以通过在 startup.cs 中使用 options.DefaultFileNames.Add 将 wwwroot 下任何文件夹中的任何文件设置为默认文件。

例如,要在 wwwroot/folder1/folder2/myfile.html 中使用 myfile.html,您将在 Startup.cs

中添加它 options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("folder1/folder2/myfile.html");
app.UseDefaultFiles(选项);
app.UseStaticFiles();

但有时它可能不起作用。例如 我创建了项目 File menu > New > Project ,然后选择 .NET Core > ASP.NET Core Web Application 并选择 Web Api 作为项目模板。 F5 总是打开页面 api/values,即使我在 wwwroot 文件夹中添加了 index.html 并在 startup.cs

中添加了以下内容
DefaultFilesOptions options = new DefaultFilesOptions();
                options.DefaultFileNames.Clear();
                options.DefaultFileNames.Add("mypage.html");
                app.UseDefaultFiles(options);
               app.UseStaticFiles();

然后我打开项目属性页面并删除了调试/启动浏览器框中的值(这是设置为 api/值) 现在启动页面的设置正在工作,mypage.html 是启动页面。请注意,此页面应位于 wwwroot 文件夹中,因为您已选择使用静态文件。

【讨论】:

  • Clearing "api/values" from Project>Properties>Debug>Launch Browser 对我有用。
  • 我已经尝试添加 var defaultFileOptions = new DefaultFilesOptions(); defaultFileOptions.DefaultFileNames.Add("../Pages/SomeFolder/Index.cshtml"); app.UseDefaultFiles(defaultFileOptions);但这没有用。我在 Pages/ 下有几个子文件夹,并希望站点默认为这些文件夹的索引页面之一,而不将该索引页面移出其文件夹。
  • "api/values" 没有显示在我的启动浏览器框中,但有一行 "launchUrl": "weatherforecast" 我必须从 launchSettings.json 中删除(这是 ASP.NET Core 3.1)。这是在此版本中创建的项目模板的剩余部分。静态页面出现在开发中,但不在生产中。我刚刚删除了launchUrl 的所有实例,它起作用了。
【解决方案7】:

对于 dotnet core web api 3.1,launchSettings.json 文件集 "launchUrl": "swagger/index.html",

【讨论】:

    【解决方案8】:

    对于 Asp.Net Core 2.2,右键单击 Project → Properties → Debug 并在 Launch Browser 复选框旁边设置所需启动页面的路径。

    Project VS

    【讨论】:

      【解决方案9】:

      如果 Index.html 在项目根目录下,默认发送。

      【讨论】:

        猜你喜欢
        • 2023-01-19
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        • 2013-12-20
        • 2019-07-20
        • 2017-07-10
        • 2022-07-07
        相关资源
        最近更新 更多