C# 使用AddMvcCore()而不是AddMvc()的ASP.NET Core 2.0 Razor页面
我不太喜欢使用预绑定的C# 使用AddMvcCore()而不是AddMvc()的ASP.NET Core 2.0 Razor页面,c#,razor,asp.net-core,.net-core,razor-pages,C#,Razor,Asp.net Core,.net Core,Razor Pages,我不太喜欢使用预绑定的AddMvc(),我更喜欢使用AddMvcCore() 话虽如此,我想知道如何使用新的(从2.0开始)AddRazorPages()和AddMvcCore() 例如,如果我们对中间件进行“基本”配置,只使用从 在我创建了一个foo.cshtml页面并将其放入\Pages\目录后,当我导航到URL\foo时,它将返回一个404(未找到页面) \Pages\Foo.cshtml @page @model IndexModel @using Microsoft.AspNetCor
AddMvc()
,我更喜欢使用AddMvcCore()
话虽如此,我想知道如何使用新的(从2.0开始)AddRazorPages()
和AddMvcCore()
例如,如果我们对中间件进行“基本”配置,只使用从
在我创建了一个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>
@page
@模型索引模型
@使用Microsoft.AspNetCore.Mvc.RazorPages
@功能{
公共类索引模型:PageModel
{
公共字符串消息{get;private set;}=“在页面模型:”;
公共互联网
{
Message+=$“服务器秒数{DateTime.Now.Second.ToString()}”;
}
}
}
你好,世界
@模型消息
上面的示例页面取自
有没有人知道这件事,或者知道遗漏了什么?我在想路线有问题
查看,我们可以看到它在内部调用AddMvcCore
,然后继续添加其他项。因此,如果我是你,我会开始添加这些项目,直到你的剃须刀页面开始工作,可能重点放在剃须刀部件上。例如:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore()
.AddViews()
.AddRazorViewEngine()
.AddRazorPages();
}
结果有两个问题 (1) 我需要运行MVC中间件(duh!) (2) 然后抛出了一个异常,这迫使我必须包含
.AddAuthorization()
在这里,它被超级简化为一个简单的控制台应用程序:
//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();
}
我不认为
AddMvcCore
添加了任何剃须刀的东西,所以你需要手动添加。你的意思是我需要.AddRazorViewEngine()
和.AddViews()
,等等?不确定剃须刀需要什么(还没有机会玩它)但我会开始添加项目,直到它按预期工作。这似乎不会改变任何事情。这就好像这些路由没有到达它们应该去的地方……您是否经过并添加了AddMvcCore
没有添加的所有位?如果我按照这个答案中的描述运行mvccore+addrazorpages,我仍然会得到错误CS0234:类型或名称空间名称“Mvc”在名称空间“Microsoft.AspNetCore”错误中不存在。
public void Configure(IApplicationBuilder app, ... )
{
app.UseMvc();
}
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();
}