提问人:Manatchanok Bumrungban 提问时间:5/19/2023 最后编辑:marc_sManatchanok Bumrungban 更新时间:5/19/2023 访问量:256
如何解决在 ASP.NET 的Index.cshtml中使用[Authorize]时的错误?
How to resolve error when using [Authorize] in Index.cshtml in ASP.NET?
问:
当我在Index.cshtml中使用[Authorize]时,我遇到了错误,我不知道如何修复它。 我只想在人们访问网页时登录页面,然后在完成后转到索引页面。
启动.cs
public class Startup
{
public IConfiguration configRoot
{
get;
}
public Startup(IConfiguration configuration)
{
configRoot = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication().AddCookie("MyCookieAuth", options =>
{
options.Cookie.Name = "MyCookieAuth";
options.LoginPath = "/Account/Login";
});
services.AddRazorPages();
}
public void Configure(WebApplication app, IWebHostEnvironment env)
{
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
}
}
Index.cshtml.cs
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace OT6.Pages
{
[Authorize]
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
public void OnGet()
{
}
}
}
错误
An unhandled exception occurred while processing the request.
InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).
Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context, string scheme, AuthenticationProperties properties)
InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).
Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context, string scheme, AuthenticationProperties properties)
Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
答:
2赞
Ajay Managaon
5/19/2023
#1
该错误清楚地表明您没有添加任何身份验证方案: 您需要添加如下方案:
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.ExpireTimeSpan = TimeSpan.FromMinutes(20);
options.SlidingExpiration = true;
options.AccessDeniedPath = "/Forbidden/";
});
同样在中间件中,您需要添加“app.UseAuthentication()“中间件,位于”app.UseAuthorzation”。
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
评论
0赞
eocron
5/19/2023
如果您还可以向 OP 解释什么是方案以及 auth/authz 如何工作和使用它,那就太好了。(没有狂热,只是添加一堆链接和简短的解释)
评论