我试图了解在以下用例中使用哪个 Http 状态代码
GET输入在端点上执行操作ID。如果服务发回:
404 - Not Found400 - Bad Request200 - OK有null回应200 - OK带有错误消息200 OK(如下所示)。 BaseResponse {
Errors [{
Message: "Data Not Found"
}],
Response: null
}
Run Code Online (Sandbox Code Playgroud)
遵循哪种正确(或标准)方法?
提前致谢。
HTTP status code对于例外,哪一个是正确的Subscription Canceled?
当用户尝试访问某个页面时,我需要抛出异常。
我检查了一些状态,例如Payment Required,但不满足要求。有什么建议吗?
是否可以从 Asp.Net Core 3.1 Web Api 返回自定义错误消息给客户端?我尝试了几种不同的方法来设置“ReasonPhrase”,但没有成功。我尝试过使用StatusCode:
return StatusCode(406, "Employee already exists");
Run Code Online (Sandbox Code Playgroud)
我尝试使用 HttpResponseMessage 返回:
HttpResponseMessage msg = new HttpResponseMessage();
msg.StatusCode = HttpStatusCode.NotAcceptable;
msg.ReasonPhrase = "Employee alredy exists";
return (IActionResult)msg;
Run Code Online (Sandbox Code Playgroud)
我试图向客户端返回一条消息,调用该员工已存在的方法:
public async Task<IActionResult> CreateEmployee([FromBody] EmployeeImport Employee)
{
var exists = await employeeService.CheckForExistingEmployee(Employee);
if (exists > 0)
{
//return StatusCode(406, "Employee already exists");
HttpResponseMessage msg = new HttpResponseMessage();
msg.StatusCode = HttpStatusCode.NotAcceptable;
msg.ReasonPhrase = "Employee already exists";
return (IActionResult)msg;
}
}
Run Code Online (Sandbox Code Playgroud)
这是客户端中的代码:
public async Task<ActionResult>AddEmployee(EmployeeImport employee)
{
var message …Run Code Online (Sandbox Code Playgroud) http-status-codes http-status-code-400 asp.net-core asp.net-core-webapi
我正在PHP中构建一个脚本来与API交互,并且需要能够解析API给我的HTTP状态代码.在大多数情况下,它提供以下响应之一:
HTTP/1.1 401 Unauthorized
HTTP/1.1 403 Forbidden
HTTP/1.1 404 Not Found
HTTP/1.1 410 Gone
Run Code Online (Sandbox Code Playgroud)
我需要能够识别正在给出的响应,并且,如果它的401或410,继续,但是,如果它是401或403,在连续几次之后跟踪并关闭脚本(因为我超过了当天的通话限制.
我的代码非常简单:
for($i = $start;$i < $end;$i++)
{
// construct the API url
$url = $base_url.$i.$end_url;
// make sure that the file is accessible
if($info = json_decode(file_get_contents($url)))
{
// process retrieved data
} else {
// what do I put here?
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道在'else'循环中放什么.我正在使用CodeIgniter框架,如果有人知道任何使用的快捷方式.此外,我愿意使用cURL,但从未有过.
我正在使用PHP进行一些重定向,例如:
header('Location: '.$url);
Run Code Online (Sandbox Code Playgroud)
但现在我需要使用其他一些状态代码进行重定向.
我应该http1.0或http1.1.或者我们已经在http2.0或更高版本?
两者的状态代码是否相同?
所以,假设我想使用状态代码404(未找到)重定向.
我可以这样做:
header('HTTP/1.1 404 Not Found');
header('Location: '.$url);
Run Code Online (Sandbox Code Playgroud)
还是有:
header('HTTP/2.0 404 Not Found');
header('Location: '.$url);
Run Code Online (Sandbox Code Playgroud) 我们目前正在努力达到OData标准:
http://www.odata.org/developers/protocols/operations
根据此标准,如果对数据执行PUT操作,则应返回204状态代码.标准说:
当处理PUT请求服务器返回状态204(无内容)以指示成功时,不需要响应主体.
现在,根据其他人在其他地方读到的内容,有些地方声称,如果你要返回204,你绝对不应该回复一个反应机构 - 这不是一个是否需要的问题.
问题是我们需要返回一个身体.在这种情况下,我们正在对一批项目执行更新查询,并且部分成功(即一些更新,一些不更新)是可能的.我们想告诉客户失败是什么,而响应机构是我能想到的唯一方法.
那么这样做的"正确"方法是什么呢?我应该甩掉W3C并返回一具尸体吗?或者我应该诋毁OData并返回不同的响应代码?还是有其他可能吗?
哪种HTTP状态代码最适合用于“客户端请求的格式错误”,例如,客户端请求format=json的数据只能以XML格式提供?我倾向于使用406,但这是指Acceptheders,而格式是在我的用例中作为查询字符串中的参数给出的。
406这里的代码正确吗?
谢谢
从瓶的到来,request.args[key]并request.form[key] 与400回应如果该键不存在.这具有快速失败的良好特性.
在Django中,request.GET[key]并request.FORM[key]提出HttpResponseBadRequest如果该键不存在,这会导致你的API与未处理的,如果一个500个响应状态.我已经看到其他答案推荐request.GET.get(key),但是无意中放松了API合同,这可能允许客户端漏洞漏掉(例如查询参数拼写错误,忘记包含参数等).
我可以手动检查所需的查询参数:
arg1 = request.POST.get('arg1')
if not arg1:
raise HttpBadRequest('"arg1" was not provided.')
arg2 = request.POST.get('arg2')
if not arg2:
raise HttpBadRequest('"arg1" was not provided.')
arg3 = request.POST.get('arg3')
if not arg3:
raise HttpBadRequest('"arg3" was not provided.')
Run Code Online (Sandbox Code Playgroud)
但这留下了很多错误的余地.(你注意到错字吗?)
我可以手动处理HttpResponseBadRequest:
def my_view(request):
try:
arg1 = request.POST['arg1']
arg2 = request.POST['arg2']
arg3 = request.POST['arg3']
except MultiValueDictKeyError as ex:
raise HttpBadRequest('"{}" was not provided.'.format(ex))
Run Code Online (Sandbox Code Playgroud)
但是现在你在写视图时还有一件事需要记住.
将上面的例子与Flask的等价物进行比较: …
我们的系统正在接受文本文件上传,并且应该具有预定的行数。如果行数不匹配,我想向用户发送排序警告,要求确认是否仍然要上传。
我是否可以为这样的事情使用特定的状态码?
我已经浏览了RFC-2616上的HTTP/1.1协议规范,并且我试图了解在调用特定REST方法时应该返回哪个状态代码.至于我研究了协议(链接),我试图将REST方法解析为正确的状态代码:
我的"表"是否正确(特别是带引号的语句??是正确的,只有GET应该在正文中返回请求本身,其余的方法只是一个URI链接到修改后的资源(新添加,修改..)包括在标题?
我的理解是否正确,是否存在另一个正式描述REST方法的来源,建议(或者我们"有义务")遵循这些来源?我对各种各样的来源非常困惑,这给了我对每个方法以及这个非常详细的RFC-2616协议的不同答案.
最好的是存在一个表格,简要而清楚地描述所有这5种方法,其中包括返回状态,正文内容和标题的可能性.