如何在 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 版本控制错误的自定义错误响应