ASP.NET 核心中间件

ASP.NET Core Middleware

我已经构建了自定义身份中间件。在 Invoke 方法中,我正在检查请求是否有令牌等。检查令牌后,我想将请求进一步传递给控制器​​。它为 GET 请求工作 - 它跳转到控制器方法。它不适用于 POST 请求。

这里是调用方法

public async Task Invoke(HttpContext context)
{
    //checking
    await _next(context);
}

其工作控制器:

[Route("api/[controller]")]
public class ValuesController : Controller
{
    // GET api/values
    [AllowAnonymous]
    [HttpGet]
    public string Get()
    {
        return "Allow annymous";
    }
 }

而且没有工作

[Route("api/[controller]")]
public class AccountController : Controller
{
    [AllowAnonymous]
    [HttpPost]
    public void Login()
    {
         //some logic
          HttpContext.Response.WriteAsync("Unauthorized");
    }
}

Making POST call Postman returns 404 not found.

尝试返回类似于 IActionResult 而不是简单的 void。

[AllowAnonymous]
[HttpPost]
public IActionResult Login() 
{
    // some logic
    return Unauthorized();
}

相关操作的路线是 /api/Account。确保这是正确的。

如果你想要 /api/Account/Login:

[Route("api/[controller]/[action]")]
public class AccountController : Controller
{
    [AllowAnonymous]
    [HttpPost]
    public void Login()
    {
         //some logic
          HttpContext.Response.WriteAsync("Unauthorized");
    }
}

看看你的代码,我希望 AccountController 中只有一种方法叫做 Login。如果不是,请将属性 [Route("Login")] 添加到 Login 方法(确保不要像 [Route("Login")] 那样将其留空,否则它将与您当前所做的相同)。

然后调用 POST http://host:***/api/account/login url 就可以了。

仅供参考:我已经在我的机器上尝试过这个东西并且它正在工作。