如何在 dotnet core web api 中设置起始页?

Posted

技术标签:

【中文标题】如何在 dotnet core web api 中设置起始页?【英文标题】:How to set start page in 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();没问题。 【参考方案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 在项目根目录下,默认发送。

【讨论】:

以上是关于如何在 dotnet core web api 中设置起始页?的主要内容,如果未能解决你的问题,请参考以下文章

dotnet core docker web api没有连接

在 dotnet core web api ::ffff:127.0.0.1 中获取客户端 IP 地址

在 ASP.NET MVC 5 控制器中使用 POST 从 dotnet Core Web API 下载文件

Web api dotnet core 中的 Api 版本控制错误的自定义错误响应

使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)

无法在asp dotnet core web api中创建HttpGet和HttpDelete。