ASP.NET Core 2.0 Razor 页面使用 AddMvcCore() 而不是 AddMvc()
Posted
技术标签:
【中文标题】ASP.NET Core 2.0 Razor 页面使用 AddMvcCore() 而不是 AddMvc()【英文标题】:ASP.NET Core 2.0 Razor Pages using AddMvcCore() instead of AddMvc() 【发布时间】:2018-01-31 17:39:59 【问题描述】:我不太喜欢使用预捆绑的 AddMvc()
,而是更喜欢使用 AddMvcCore()
。
话虽如此,我想知道如何使用新的(从 2.0 开始)AddRazorPages()
和 AddMvcCore()
。
例如,如果我们对中间件进行“基本”配置,只使用从official repository 中找到的AddRazorPages()
// loaded the NuGet package Microsoft.AspNetCore.Mvc.RazorPages
public void ConfigureServices(IServiceCollection services)
services.AddMvcCore()
.AddRazorPages();
在我创建foo.cshtml
页面并将其放入.\Pages\
目录后,当我导航到 URL \Foo
时,它返回 404(找不到页面)。
.\Pages\Foo.cshtml
@page
@model IndexModel
@using Microsoft.AspNetCore.Mvc.RazorPages
@functions
public class IndexModel : PageModel
public string Message get; private set; = "In page model: ";
public void OnGet()
Message += $" Server seconds DateTime.Now.Second.ToString() ";
<h2>Hello World</h2>
<p>
@Model.Message
</p>
以上示例页面取自Microsoft Documents: Introduction to Razor Pages in ASP.NET Core
有没有人弄清楚这一点,或者知道缺少什么?我认为路由有问题。
【问题讨论】:
我认为AddMvcCore
不会添加任何 Razor 内容,因此您需要手动添加。
你的意思是我需要.AddRazorViewEngine()
和.AddViews()
等?
不确定 RazorPages 到底需要什么(还没有机会玩它),但我会开始添加项目,直到它按预期工作。
【参考方案1】:
原来有两个问题。
(1) 我需要运行 MVC 中间件(呵呵!)
public void Configure(IApplicationBuilder app, ... )
app.UseMvc();
(2) 然后我抛出了一个异常,这迫使我必须包含.AddAuthorization()
public void ConfigureServices(IServiceCollection services)
services.AddMvcCore()
.AddAuthorization()
.AddRazorPages();
在这里它被超级简化成一个简单的控制台应用程序:
//using System.IO;
//using Microsoft.AspNetCore.Builder;
//using Microsoft.AspNetCore.Hosting;
//using Microsoft.Extensions.DependencyInjection;
public static void Main(string[] args)
IWebHost host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureServices(services =>
services.AddMvcCore()
.AddAuthorization()
.AddRazorPages();
)
.Configure(app =>
//app.UseExceptionHandler("/error");
app.UseStaticFiles();
app.UseMvc();
)
.Build();
host.Run();
【讨论】:
【参考方案2】:查看source code for AddMvc
,我们可以看到它在内部调用AddMvcCore
,然后继续添加其他项目。所以如果我是你,我会开始添加这些项目,直到你让 Razor Pages 工作,可能专注于 Razor 部分。例如:
public void ConfigureServices(IServiceCollection services)
services.AddMvcCore()
.AddViews()
.AddRazorViewEngine()
.AddRazorPages();
【讨论】:
这似乎没有任何改变。就好像路线没有去他们应该去的地方...... 你有没有把AddMvcCore
没有的所有位都加进去?以上是关于ASP.NET Core 2.0 Razor 页面使用 AddMvcCore() 而不是 AddMvc()的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET Core 2.0 Razor 页面中填充下拉列表
如何使用 asp.net core 2.0 Razor 页面执行下载操作
如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作
我无法在 asp.net core 2.0 razor pages 中执行下载操作
Razor Page–ASP.NET Core 2.0 新功能
ASP.NET Core 2.0/Razor Pages - 如何在请求之间将数据保存在 NonFactors MVC6 网格中?