2

我不是使用预先捆绑的忠实粉丝,而是AddMvc()更喜欢使用AddMvcCore()

话虽如此,我想知道如何使用新的(从 2.0 开始)AddRazorPages()AddMvcCore().

例如,如果我们对中间件进行“基本”配置,只使用AddRazorPages()官方存储库中找到的中间件

// loaded the NuGet package Microsoft.AspNetCore.Mvc.RazorPages
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore()
        .AddRazorPages();
}

创建foo.cshtml页面并将其放入.\Pages\目录后,当我导航到 URL 时,它返回 404 (Page not found) \Foo

.\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 文档:ASP.NET Core 中 Razor 页面简介

有没有人弄清楚这一点,或者知道缺少什么?我认为路由有问题。

4

2 回答 2

5

原来有两个问题。

(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();
}
于 2017-08-24T01:56:08.910 回答
1

查看源代码,AddMvc我们可以看到它在AddMvcCore内部调用,然后继续添加其他项目。所以如果我是你,我会开始添加这些项目,直到你让 Razor Pages 工作,可能专注于 Razor 部分。例如:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore()
        .AddViews()
        .AddRazorViewEngine()
        .AddRazorPages();
}
于 2017-08-23T08:39:50.350 回答