Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RESTAPI-使用ETag进行并发检查_C#_Rest_Asp.net Core Webapi - Fatal编程技术网

C# RESTAPI-使用ETag进行并发检查

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上的资源表示形式

在构建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包括此示例

<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>