项目启动页面的是Pages文件夹下的Index.chtml文件
razor视图,在做页面跳转的,对于跳转到html,只能将html放在静态文件下,也就是wwwroot文件夹下面。
发送请求到razor page时,遵守如下规范
前端:
url: "/MyOwn?handler=HelloWorld"
MyOwn是页面名称,若在子文件下,则是/folder/MyOwn
handler是固定写法,后面的参数是方法的名称,如MVC中action的名称
后端:
public class MyOwnModel : PageModel
{
public async Task<ActionResult> OnPostHelloWorldAsync(string password)
{
return new JsonResult("登录成功");
}
}
后端:
public class MyOwnModel : PageModel
{
public async Task<ActionResult> OnPostHelloWorldAsync(string password)
{
return new JsonResult("登录成功");
}
}
默认遵守规范,OnPostHelloWorldAsync,OnPost是固定写法,表示Post请求,HelloWorld与上面的handler参数相对应,Async是异步写法,可有可无,取决于项目的写法。
对于处理ajax请求的问题:
1.请求razor page,也就是cshtml文件,正常的Get请求是没有问题的,但是使用post,就会出现400的错误,原因是razor使用防卫令牌验证,可以在startup中配置禁用,以下方式是全局禁用,也可部分禁用。
public void ConfigureServices(IServiceCollection services)
{
services
.AddMvc()
//禁用Razor页面防卫令牌验证
.AddRazorPagesOptions(o =>
{
o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
}).InitializeTagHelper<FormTagHelper>((helper, context) => helper.Antiforgery = false)
//设置默认路由,当访问时只要写上other,就会自动路由到extras/index下了
.AddRazorPagesOptions(o =>
{
o.Conventions.AddPageRoute("/extras/index", "other");
});
}
2.请求控制器,请求控制器需要配置路由,否则也是400错误
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
//app.UseMvc();
//定义控制器的路由,否则不能发送请求到控制器
app.UseMvc(route =>
{
route.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
});
//app.UseMvcWithDefaultRoute();
}