小编vin*_*ras的帖子

无法执行 Cookie 身份验证:SignInAsync 和 AuthenticateAsync 不成功

我正在尝试构建一个非常简单的游乐场服务器来研究一些 ASP.NET Core 身份验证/授权概念。基本上是一个带有一个非常简单的控制器的网络应用程序,可以用 Postman 进行测试。

我想出了我的代码的缩小版本,由一个登录端点组成,该端点将使用 Cookie 身份验证对用户进行身份验证(不需要凭据),如下所示:

[ApiController]
public class MyController : ControllerBase
{
    [HttpGet("/login")]
    public async Task<IActionResult> Login()
    {
        var claims = new[] { new Claim("name", "bob") };
        var identity = new ClaimsIdentity(claims);
        var principal = new ClaimsPrincipal(identity);

        await HttpContext.SignInAsync(principal);
        return Ok();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是调用HttpContext.SignInAsync()正在触发以下异常:

System.InvalidOperationException: SignInAsync when principal.Identity.IsAuthenticated is false is not allowed when AuthenticationOptions.RequireAuthenticatedSignIn is true.
   at Microsoft.AspNetCore.Authentication.AuthenticationService.SignInAsync(HttpContext context, String scheme, ClaimsPrincipal principal, AuthenticationProperties properties)
   at MyController.Login() in C:\Users\vinic\Desktop\TEMP\TestesAuthorization\Controllers\MyController.cs:line 18
Run Code Online (Sandbox Code Playgroud)

然后我尝试HttpContext.SignInAsync()通过调用来替换 …

c# cookies asp.net-core .net-5

5
推荐指数
2
解决办法
1747
查看次数

使用 Roslyn API 读取 *.csproj 属性值?

我目前正在构建一个支持 ASP.NET Core 项目开发的工具。此工具使用 Roslyn API 和其他方法来验证某些开发要求(例如应用到 API 控制器上的项目特定属性、强制执行命名约定以及为访问使用 ASP.NET 编写的 API 的 JavaScript SPA 生成一些源代码核心 Web API 模板)。

为此,我目前正在使用硬编码路径为 SPA 应用程序生成代码。但是在应用程序的*.csproj文件中,实际上有一个“SpaRoot”属性指定了 SPA 应用程序在项目中的位置:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
    <TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
    <IsPackable>false</IsPackable>
    <SpaRoot>ClientApp\</SpaRoot>
    ...
  </PropertyGroup>
  ...
</Project>
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何使用 Roslyn API 读取“SpaRoot”属性的值?

我编写了一个最小代码示例来创建Workspace、打开Solution和检索Project的引用,它类似于以下内容:

static async Task Main(string[] args)
{
    string solutionFile = @"C:\Test\my-solution.sln";
    using (var workspace = MSBuildWorkspace.Create())
    {
        var solution = await workspace.OpenSolutionAsync(solutionFile);

        string projectName = "some-project";
        var project = solution.Projects.Single(p => …
Run Code Online (Sandbox Code Playgroud)

c# roslyn

4
推荐指数
1
解决办法
862
查看次数

标签 统计

c# ×2

.net-5 ×1

asp.net-core ×1

cookies ×1

roslyn ×1