C# RESTAPI-使用ETag进行并发检查
在构建RESTful api时,解决并发问题的一种方法是使用ETag。要使其工作,客户端必须使用请求头指定ETag 如果请求头中没有ETag,一般做法是什么?我们只是返回一个错误的请求吗?我们是否在通知客户的回复中也包括ETag的缺失?是否有任何方法可以将需要特定标题的操作通知客户机 提前感谢?ETag上怎么说: ETag是一个不透明的标识符,由Web服务器分配给在URL上找到的资源的特定版本。如果该URL上的资源表示形式发生更改,则会分配一个新的不同ETag 然后 如果该URL上的资源表示形式发生更改,则会分配一个新的不同ETag 话虽如此,应该清楚的是,在GET请求中,不应该出现ETag,或者web服务器不应该考虑它。 然而,GET请求的响应应该包含ETag,该ETag应该在下一个实体的修改中使用 实际上,根据是否涉及缓存,它可以在GET请求中显示,但正如我从您的问题中看到的,这里不是这样吗 您可以阅读如何在Azure表存储中使用ETag。注意,ATS允许省略ETag。在这种情况下,将执行普通更新。这是有道理的:允许省略ETag意味着更大的灵活性;程序员可以决定在何处处理并发—由Azure表存储使用ETag或在客户端级别处理,在客户端级别,调用方检查或至少应该检查ODR,以使请求不会遇到并发问题 说到RESTful api,这意味着没有通用的实践。您应该决定客户端是否能够在没有Etag的情况下使用您的API,如果不能,则返回相应的错误代码。若要通知客户端应使用ETag,您可以将其与响应一起返回。ETag上的内容: ETag是一个不透明的标识符,由Web服务器分配给在URL上找到的资源的特定版本。如果该URL上的资源表示形式发生更改,则会分配一个新的不同ETag 然后 如果该URL上的资源表示形式发生更改,则会分配一个新的不同ETag 话虽如此,应该清楚的是,在GET请求中,不应该出现ETag,或者web服务器不应该考虑它。 然而,GET请求的响应应该包含ETag,该ETag应该在下一个实体的修改中使用 实际上,根据是否涉及缓存,它可以在GET请求中显示,但正如我从您的问题中看到的,这里不是这样吗 您可以阅读如何在Azure表存储中使用ETag。注意,ATS允许省略ETag。在这种情况下,将执行普通更新。这是有道理的:允许省略ETag意味着更大的灵活性;程序员可以决定在何处处理并发—由Azure表存储使用ETag或在客户端级别处理,在客户端级别,调用方检查或至少应该检查ODR,以使请求不会遇到并发问题 说到RESTful api,这意味着没有通用的实践。您应该决定客户端是否能够在没有Etag的情况下使用您的API,如果不能,则返回相应的错误代码。要通知客户端应该使用ETag,您可以将它们与响应一起返回 如果请求头中没有ETag,一般做法是什么?我们只是返回一个错误的请求吗 RFC 6586定义了: 我们是否在通知客户的回复中也包括ETag的缺失 是的,就像你对其他人一样 RFC6585包括此示例C# RESTAPI-使用ETag进行并发检查,c#,rest,asp.net-core-webapi,C#,Rest,Asp.net Core Webapi,在构建RESTful api时,解决并发问题的一种方法是使用ETag。要使其工作,客户端必须使用请求头指定ETag 如果请求头中没有ETag,一般做法是什么?我们只是返回一个错误的请求吗?我们是否在通知客户的回复中也包括ETag的缺失?是否有任何方法可以将需要特定标题的操作通知客户机 提前感谢?ETag上怎么说: ETag是一个不透明的标识符,由Web服务器分配给在URL上找到的资源的特定版本。如果该URL上的资源表示形式发生更改,则会分配一个新的不同ETag 然后 如果该URL上的资源表示形式
<html>
<head>
<title>Precondition Required</title>
</head>
<body>
<h1>Precondition Required</h1>
<p>This request is required to be conditional;
try using "If-Match".</p>
</body>
</html>
是否有任何方法可以将需要特定标题的操作通知客户机
我看不到任何标准的机制来与通用组件进行通信
我认为,通常的机制是根据请求传达这些信息:
生成对选项的成功响应的服务器应发送任何头字段,这些头字段可能指示由服务器实现并适用于目标资源的可选功能,例如允许,包括本规范未定义的潜在扩展。响应有效负载(如果有的话)还可以在机器或人类可读表示中描述通信选项
如果请求头中没有ETag,一般做法是什么?我们只是返回一个错误的请求吗
RFC 6586定义了:
我们是否在通知客户的回复中也包括ETag的缺失
是的,就像你对其他人一样
RFC6585包括此示例
<html>
<head>
<title>Precondition Required</title>
</head>
<body>
<h1>Precondition Required</h1>
<p>This request is required to be conditional;
try using "If-Match".</p>
</body>
</html>
是否有任何方法可以将需要特定标题的操作通知客户机
?
我看不到任何标准的机制来与通用组件进行通信
我认为,通常的机制是根据请求传达这些信息:
生成对选项的成功响应的服务器应发送任何头字段,这些头字段可能指示由服务器实现并适用于目标资源的可选功能,例如允许,包括本规范未定义的潜在扩展。响应有效负载(如果有的话)还可以在机器或人类可读表示中描述通信选项
<html>
<head>
<title>Precondition Required</title>
</head>
<body>
<h1>Precondition Required</h1>
<p>This request is required to be conditional;
try using "If-Match".</p>
</body>
</html>