我想同时使用 Razor Pages 和“带有视图的 MVC”。
所以我使用了
services.AddRazorPages()
(提供了RazorPages和WebAPI),然后使用了services.AddControllersWithViews()
(提供了MVC和MVC+视图)。
这有效。
但如果我省略后者,它也有效。 为什么?
AddRazorPages
通过services.AddMvcCore()
添加了基本的WebAPI支持。但是我不明白 mvc+views 是如何/在哪里添加的?我想知道这是否是预期的行为,或者我是否犯了配置错误。
实际上,如果你只使用AddMVCCore,它不会注册视图服务,这将使你的应用程序无法使用视图。
像下面的错误:
但是 services.AddRazorPages 将添加 RazorViewEngine,它包含使 MVC 视图正常工作的视图功能。
源代码:
/// <summary>
/// Register services needed for Razor Pages.
/// </summary>
/// <param name="builder">The <see cref="IMvcCoreBuilder"/>.</param>
/// <param name="setupAction">The action to setup the <see cref="RazorPagesOptions"/>.</param>
/// <returns>The <see cref="IMvcCoreBuilder"/>.</returns>
public static IMvcCoreBuilder AddRazorPages(
this IMvcCoreBuilder builder,
Action<RazorPagesOptions> setupAction)
{
ArgumentNullException.ThrowIfNull(builder);
ArgumentNullException.ThrowIfNull(setupAction);
builder.AddRazorViewEngine();
AddRazorPagesServices(builder.Services);
builder.Services.Configure(setupAction);
return builder;
}
因此,如果您在 MVC 应用程序中使用以下代码,它也会很好地工作。
builder.Services.AddMvcCore().AddRazorViewEngine();