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 网格中?