我有一些代码使用.NET SDK将消息从Azure存储队列中出列。当在调试器中本地运行时,此操作可以正常工作。然而,当我在Kubernetes集群中运行时,我得到一个HTTP 405错误-";该资源不支持指定的http谓词";。关于SDK为什么会抛出这个特定的错误消息,有什么想法吗?显然,它必须使用正确的HTTP谓词。
请检查以下解决方法:
有时,可能是由于微小的更改导致了此错误的发生。
- 请检查您是否正在传递队列的名称和其他您正试图出列的队列的正确参数
- 同时尝试在应用程序中
allow CORS
Web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
</customHeaders>
</httpProtocol>
</system.webServer>
- 问题可能与http动词有关,因为azure允许https请求。请检查并尝试将http请求更改为https请求
- 有时,使用POST方法可能会发生这种情况
尝试检索队列并删除队列以实现出列操作,如下面来自c#-Dequile-Stack Overflow 的代码
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Environment.GetEnvironmentVariable("AzureWebJobsStorage"));
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Async dequeue the message
CloudQueueMessage retrievedMessage = await queue.GetMessageAsync();
Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString);
//Process the message in less than 30 seconds, and then delete the message
await queue.DeleteMessageAsync(retrievedMessage);
return (ActionResult)new OkObjectResult(retrievedMessage.AsString);
}
类似于使用ReceiveMessagesAsync
的microsoft文档出列消息,只检索队列中的下一条消息。收到消息后,通过调用DeleteMessageAsync
将其从队列中删除。
- 您可以在此处检查一些原因>HTTP错误405.0(IIS(网站|Microsoft文档
如果用户已安装IIS功能并勾选了所有选项(包括"WebDAV Publishing"
(,则可能会出现此问题。因此,请删除WebDAV发布功能
参考:
- c#-Azure ASP Web API错误405方法不允许-堆栈溢出