Javascript WebAPI和401 vs 200
我正在构建一个WebAPI作为一个学习项目,并尝试使用最佳实践。我的第一次尝试是身份验证API,它接受身份验证对象(JSON): 它在/API/authenticate上作为POST调用我的API,并传递对象 在我的.Net代码中,我进行了一些检查,如果用户名/密码通过,我将创建一个jwt令牌,并将其与角色一起返回。我的API返回一个在主体中带有标记的200(Chrome developer tools中的响应显示“ey…”,这是我的jwt) 如果我的用户名/密码无效,我将返回401 我不确定这是否正确。我应该返回一个200-和一些其他有效载荷的机构?(不确定是什么),然后我的成功登录应该返回JSON,例如:Javascript WebAPI和401 vs 200,javascript,c#,.net,rest,asp.net-web-api,Javascript,C#,.net,Rest,Asp.net Web Api,我正在构建一个WebAPI作为一个学习项目,并尝试使用最佳实践。我的第一次尝试是身份验证API,它接受身份验证对象(JSON): 它在/API/authenticate上作为POST调用我的API,并传递对象 在我的.Net代码中,我进行了一些检查,如果用户名/密码通过,我将创建一个jwt令牌,并将其与角色一起返回。我的API返回一个在主体中带有标记的200(Chrome developer tools中的响应显示“ey…”,这是我的jwt) 如果我的用户名/密码无效,我将返回401 我不确定这
{
success: true,
error: null
token: "ey.....",
}
登录返回失败:
{
success: false,
error: null
token: null,
}
然后是一个错误:
{
success: false,
error: 500
token: null,
}
然后客户端代码使用它来决定做什么?我正在尝试一个最佳实践来学习如何在WebAPI中处理这个问题。我认为这里没有真正的“最佳实践”。一些API返回一个错误对象,就像使用JSON一样。那很好。其他API返回HTTP错误(401500等)。其他API同时返回这两个参数。每种方法都有优缺点,所以选择你喜欢的或最适合你需要的方法 如果您使用第一种方法,请不要限制自己返回HTTP代码。相反,返回代码为您和API的使用者提供对错误的更具体的引用。例如,代码401没有告诉我身份验证失败的原因。对于安全性来说,这可能没问题,但我在这里仅将其用作示例,因此您可以为不正确的凭据返回代码1001,为锁定的帐户返回代码1002,为等待批准的帐户返回代码1003,等等 第一种方法的优点:API使用者可以使用简单的
if…else
或开关
逻辑在同一代码中处理所有内容。它也更容易测试。缺点:您仍然需要使用try…catch
,因为对API的请求可能仍然失败,因此消费者代码将具有上述逻辑加上try…catch
逻辑
第二种方法的优点:它更符合我们通常的做事方式。使用try…catch
处理所有错误,其中的代码仅用于成功路径。缺点是:测试起来有点困难,而且你会被HTTP错误代码所困扰
第三种方法是两者的结合。在某些情况下,这可能是一种过激行为,并增加了一些不必要的复杂性和重复性,但在其他情况下,它可以结合两个世界的好处
在这里,我给出了一种不同的返回响应消息的方式。。。
我希望,这将有助于您返回回复信息
//登录成功
在下面的代码中,它显示了成功响应
返回内容(HttpStatusCode.Ok,错误)这将有助于在邮差工具的标题中返回状态代码
//用于未经授权的用户登录
在下面的代码中,它显示了登录失败的响应
在这里,我们可以向用户提及错误状态作为响应…返回内容(HttpStatusCode.Unauthorized,错误)这将有助于在邮差工具的标题中返回状态代码 //错误 在下面的代码中,它显示了登录失败的响应 在这里,我们可以向用户提及错误状态作为响应…
返回内容(HttpStatusCode.InternalServerError,error)这将有助于在邮差工具的标题中返回状态代码
您在这里问了两个不同的问题1)错误返回什么,JSON或HTTP错误?2) 我的代码没有从API中获取JSON对象。在你的帖子里,你不应该问一个以上的问题。我已经回答了第一个问题,其他一些人可能会补充更多的答案。我建议删除第二个问题,复制它并创建另一个问题。使用-return401(不要返回200,因为它表示成功),也可以在正文中返回json,并提供详细说明。
{
success: false,
error: 500
token: null,
}
if (result == null)
{
var error = new
{
Success = "true",
Token = "your token"
};
return Content(HttpStatusCode.Ok, error);
}
if (result == some condition)
{
var error = new
{
Error = new
{
StatusCode = HttpStatusCode.Unauthorised,
Message = "Invalid Credential...! ",
InternalMessage = "Some message"
}
};
return Content(HttpStatusCode.Unauthorised, error);
}
if (result == somecondition)
{
var error = new
{
Error = new
{
StatusCode = HttpStatusCode.InternalServerError,
Message = "Error in functionality...!",
InternalMessage = "Some message"
}
};
return Content(HttpStatusCode.InternalServerError, error);
}