Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义AuthorizeAttribute-对登录用户和api用户使用相同的控制器_C#_Asp.net Mvc_Asp.net Web Api_Asp.net Core 3.1 - Fatal编程技术网

C# 自定义AuthorizeAttribute-对登录用户和api用户使用相同的控制器

C# 自定义AuthorizeAttribute-对登录用户和api用户使用相同的控制器,c#,asp.net-mvc,asp.net-web-api,asp.net-core-3.1,C#,Asp.net Mvc,Asp.net Web Api,Asp.net Core 3.1,我有一个api控制器,几个桌面应用程序使用它来获取数据。调用方可以使用基本身份验证或JwtBearer身份验证,并且可以正常工作 [ApiController] [Route("[controller]")] public class MyController : ControllerBase { [HttpGet("{id}")] [ReadOnly] public IActionResult Get([FromRoute] st

我有一个api控制器,几个桌面应用程序使用它来获取数据。调用方可以使用基本身份验证或JwtBearer身份验证,并且可以正常工作

[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
    [HttpGet("{id}")]
    [ReadOnly]
    public IActionResult Get([FromRoute] string id)
    {
        return Ok();
    }
}

public class ReadOnlyAttribute : AuthorizeAttribute
{
    public ReadOnlyAttribute()
    {
        AuthenticationSchemes = "BasicAuthentication,Bearer";
        Roles = "ReadOnly";
    }
}
对于登录到该站点的用户,我现在创建了一个直接指向该资源的链接,这样就可以在浏览器中查看该资源,并可以手动下载

但是会弹出一个浏览器登录对话框,请求用户登录

所以我天真地将“Cookies”添加到AuthenticationSchemes中,但结果相同

        AuthenticationSchemes = "Cookies,BasicAuthentication,Bearer";
如果我根本不设置AuthenticationSchemes,它对登录的用户很好,但api用户得到的结果是302

是否可以以某种方式重用这样的控制器,或者我必须为api和登录用户使用单独的控制器