【问题标题】:How should i send 401 and 403 response code in asp.net core web api?我应该如何在 asp.net core web api 中发送 401 和 403 响应代码?
【发布时间】:2020-08-06 18:48:09
【问题描述】:

我需要在删除用户时发送 401 和 403 响应代码。我正在尝试使用基于属性的路由。响应 401 作为对象(应用程序/json): {成功:假} 响应 403 作为对象(应用程序/json): {成功:假}

[Authorize]
[Route("users/{id}")]
[HttpDelete]
public ActionResult DeleteUser(Guid id)
{
    try
    {
        using (var context = new POCContext())
        {
            var entity = context.Users.FirstOrDefault(e => e.UserId == id);
            if (entity == null)
            {
                return NotFound(new { success = false });
            }
            else
            {
                context.Users.Remove(entity);
                context.SaveChanges();
                return NoContent();
            }
        }
    }
    catch (Exception ex)
    {
        return BadRequest(new { success = false });
    }
}

X

【问题讨论】:

  • 还有什么问题?你的代码的结果是什么?
  • 我收到 500 响应代码。我正在使用提琴手进行测试。删除方法,这是我的请求。localhost:44384/users/62C2428D-9A7B-40F2-94F1-2200C6C064C6.. 我做得对吗?
  • 500 表示抛出异常。您将需要调试代码以查看它的来源。如果您使用错误的详细信息更新您的问题,也许我们可以为您提供进一步的帮助。

标签: asp.net-core asp.net-web-api asp.net-core-2.1 http-status-codes entity-framework-core-2.1


【解决方案1】:

当您在控制器中时,您可以直接在您的方法中修改Response,只需执行Response.StatusCode = 401;,如下所示:

[Authorize]
[Route("users/{id}")]
[HttpDelete]
public ActionResult DeleteUser(Guid id)
{
    try
    {
        using (var context = new POCContext())
        {
            var entity = context.Users.FirstOrDefault(e => e.UserId == id);
            if (entity == null)
            {
                Response.StatusCode = 401;
                return NotFound(new { success = false });
            }
            else
            {
                context.Users.Remove(entity);
                context.SaveChanges();
                Response.StatusCode = 200;
                return NoContent();
            }
        }
    }
    catch (Exception ex)
    {
        Response.StatusCode = 401;
        return BadRequest(new { success = false });
    }
}

【讨论】:

  • 我无法使用 [Authorize] 属性调用 Deleteuser。如果我删除 [Authorize] 我在调试点得到。
  • [Authorize] 是一个处理授权的过滤器属性,你问的问题与它无关。您的主要代码有什么问题?
  • 从数据库中删除用户时,我需要检查这么多响应代码。响应 204 作为对象 (application/json): {success: true} 响应 400 作为对象 (application/json): {success: false} 响应 401 作为对象 (application/json): {success: false} 响应 403 作为对象 ( application/json): {success: false} 响应 404 作为对象 (application/json): {success: false} 响应 500 作为对象 (application/json): {success: false} 我该如何实现这一切?帮助将不胜感激
猜你喜欢
  • 2020-07-06
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多