我应该在对用户进行身份验证之后回复哪个HTTP状态代码,然后发现他们在注册后没有激活他们的帐户?
想象一下,我们有一个API,可以通过POST创建一个新的Employee
www.example.com/api/employees
Run Code Online (Sandbox Code Playgroud)
一名员工可以被描述为,
{
name: "John Smith",
tax_number: "ABC123"
}
Run Code Online (Sandbox Code Playgroud)
税号对所有人来说都是独一无二的.如果创建了一个创建,并且已存在一个名称和税号与现有记录匹配的记录,则可以安全地假设请求者想要返回该记录的引用(使用它的内部id和其他数据,客户端可能不会有,例如,创建于,更新于).
HTTP状态代码用于返回该资源的内容是什么?我想重定向可以用于返回id,但我更喜欢将整个对象包含在响应中.
这种情况对于简单的重复错误是唯一的,因为如果尝试重复,则意味着您希望创建的记录已经存在 - 而不是与现有记录冲突.
如果我将客户端连接的服务指向错误的URL,为什么我得到的HttpStatusCode为0.
我的statusCodeAsInt显示为0.为什么它没有显示为404并正在处理?
IRestResponse response = client.Execute(restReq);
HttpStatusCode statusCode = response.StatusCode;
var statusCodeAsInt = (int) statusCode;
if (statusCodeAsInt >= 500)
{
throw new InvalidOperationException("A server error occurred: " + response.ErrorMessage, response.ErrorException);
}
if (statusCodeAsInt >= 400)
{
throw new InvalidOperationException("Request could not be understood by the server: " + response.ErrorMessage,
response.ErrorException);
}
Run Code Online (Sandbox Code Playgroud)
处理此RestResponse的正确方法是什么?
设置Response.StatusCode = 404不提供IE8和Chrome下的内容?虽然我发现它很奇怪但它在Mozilla中有效!
做最简单的事情 - 使用空的Default.aspx页面清空asp.net Web应用程序项目.在Page_Load事件中使用以下内容:
protected void Page_Load( object sender, EventArgs e )
{
Response.StatusCode = 404;
}
Run Code Online (Sandbox Code Playgroud)
这有效地将当前请求的状态代码设置为404,毫无疑问.在IE8或Chrome下渲染时,或者也可能是其他一些浏览器 - 我还没有测试过,实际页面根本没有显示.这些浏览器显示其默认的404错误页面(不是默认的IIS自定义错误).IE8中的示例:
The webpage cannot be found
HTTP 404
Most likely causes:
•There might be a typing error in the address.
•If you clicked on a link, it may be out of date. ... and so on ...
Run Code Online (Sandbox Code Playgroud)
我真正想要做的是提供404错误页面,其中包含404错误代码,实际上会告诉浏览器或爬虫或者此页面不存在的任何人 - 不仅要显示一些带有状态消息的精美自定义错误消息200 OK .
使用fiddler表明我实际上真的在服务请求,但是浏览器完全无视它?!
我的问题 - 如何设置404状态代码并仍然呈现页面内容?示例 - http://www.intel.com/invalidpage.wow.使用fiddler显示此页面提供404状态代码.
我有一个启用了restful的Web服务站点,因此其他网站/ ajax脚本可以调用该站点来获取/设置数据.但是,每当Web服务站点以某种方式返回PHP致命错误时,返回的HTTP状态为200而不是500.是否有办法修复它,以便每当发生致命错误时,返回500而不是200?或者,如果不可能,我如何更改我的客户端以识别Web服务返回的致命错误?
我开始喜欢HTTP,直到我发现一些状态代码like 304,不包含消息体并由CRLF终止.
哪里是全面的清单?到目前为止,我有:100-199,204,和304.还有其他人吗?
编辑:不,不符合标准.谢谢你的回答.
我关注持久连接的消息分隔.即一个HTTP消息停止在哪里,下一个开始.
假设客户端请求以下URL:
/user-details?user=123
Run Code Online (Sandbox Code Playgroud)
如果/user-details是不存在的资源,则显然是正确的状态代码404.
但是,如果/user-details确实存在,但不存在具有id的用户123:
404 Not Found,我已经退回了一个,但经验告诉我,不知道它是资源还是未找到的实体令人困惑;400 Bad Request,但我觉得它也很混乱,因为请求在技术上是正确的,只是请求一个不存在的实体.是否有更合适的HTTP状态代码用于此目的?
在项目上工作,我只是发出一个AJAX请求来处理一些数据.
完成作业后,服务器将返回HTTP 205 RESET CONTENT响应
我使用此状态代码告诉请求者重置文档视图
这是我使用的代码片段
$.ajax({
url: '/unread',
method: 'PUT',
data: {
notifications: elements
}
}).done(function(content, message, xhr) {
if (205 !== xhr.status) {
// Generic error message
return;
}
window.location.reload(true)
}).fail(function() {
// Generic error message
})
Run Code Online (Sandbox Code Playgroud)
这适用于Internet Explorer (8及以上版本),Firefox (28.0)和Opera (12.16).但是Chrome (33.0)和Opera (20.0)不是刷新页面,而是在调用时下载正在重新加载dump的页面的响应内容window.location.reload
这是我尝试过的
window.location.href = window.location.href 给出相同的结果history.go(0) 给出相同的结果window.location.reload,则不会重新加载任何内容这是正在发生的事情的视觉网络

附加信息(以及更深入的调查)
您可能知道我们在RC1版本的ASP.NET MVC中有一个名为FileResult的新ActionResult.
使用它,您的操作方法可以动态地将图像返回到浏览器.像这样的东西:
public ActionResult DisplayPhoto(int id)
{
Photo photo = GetPhotoFromDatabase(id);
return File(photo.Content, photo.ContentType);
}
Run Code Online (Sandbox Code Playgroud)
在HTML代码中,我们可以使用以下内容:
<img src="http://mysite.com/controller/DisplayPhoto/657">
Run Code Online (Sandbox Code Playgroud)
由于图像是动态返回的,我们需要一种方法来缓存返回的流,这样我们就不需要再次从数据库中读取图像.我想我们可以用这样的东西来做,我不确定:
Response.StatusCode = 304;
Run Code Online (Sandbox Code Playgroud)
这告诉浏览器您已在缓存中拥有该图像.在将StatusCode设置为304后,我只是不知道在我的action方法中返回什么.我应该返回null还是什么?
很多资源都说,GraphQL 应该始终以 200 状态代码响应,即使发生错误:
因为 GraphQL 可以在一个响应中返回多个响应,所以这是有道理的。当用户在一个请求中请求两个资源,并且只能访问第一个资源时,您可以发回第一个资源并forbidden为第二个资源返回错误。
然而,这只是我在阅读多个 GraphQL 库和博客文章的文档的过程中想到的。我在官方规范中没有找到任何关于 HTTP 状态代码的信息,这里是https://spec.graphql.org/或这里是https://graphql.org/
errors{
"errors" => [{
"message" => "Graphql::Forbidden",
"locations" => [],
"extensions" => {
"error_class" => "Graphql::Forbidden", "status" => 403
}
}]
}
Run Code Online (Sandbox Code Playgroud)
400 Bad Request吗?{
"errors" => [{
"message" => "Field 'foobar' doesn't exist on type 'UserConnection'",
"locations" …Run Code Online (Sandbox Code Playgroud) http ×4
httpresponse ×2
rest ×2
ajax ×1
api ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
caching ×1
graphql ×1
javascript ×1
php ×1
post ×1