由于我遇到了边缘情况,在这种情况下,我在PUT
和DELETE
上收到了405
状态,如下所示:
WebAPI Delete not working - 405 Method Not Allowed
这要求我更改web.config
文件,该文件仅在项目发布时创建。因此,我需要在web.config
中插入几行代码,例如:
<modules>
<remove name="WebDAVModule" />
</modules>
还有一些。
我的答案基于@Shayki Abramczyk的答案,我认为它提供了另一种更新的解决此问题的方法。由于他的答案对我来说并没有完全起作用,而且对于那些不是DevOps领域专业人员,而是想要自动化CI-CD工作流程的程序员来说,这个答案更加适用。
我认为目前存在的问题是这行代码:
cd $env:Agent_ReleaseDirectory
没有导航到正确的文件夹。您仍需要导航到文件夹并拖放您的 zip 文件,就像这样:cd _Your.Project-CI\drop
因此,请通过以下方式在发布流水线中添加另一个 PowerShell
组件:
![enter image description here](https://istack.dev59.com/e0Fkw.webp)
并将以下代码添加到其中:
cd $env:Agent_ReleaseDirectory
cd _Your.Project-CI\drop
$fileToEdit = "web.config"
[Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem");
$zipfileName = dir -filter '*.zip'
$zip = [System.IO.Compression.ZipFile]::Open($zipfileName.FullName,"Update")
$configFile = $zip.Entries.Where({$_.name -like $fileToEdit})
$desiredFile = [System.IO.StreamReader]($configFile).Open()
$text = $desiredFile.ReadToEnd()
$desiredFile.Close()
$desiredFile.Dispose()
$contentToAdd1 = @'
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
'@
$text = $text -replace '<system.webServer>',$contentToAdd1
$contentToAdd2 = @'
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DELETE,DEBUG" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
'@
$text = $text -replace '<handlers>',$contentToAdd2
$desiredFile = [System.IO.StreamWriter]($configFile).Open()
$desiredFile.BaseStream.SetLength(0)
$desiredFile.Write($text)
$desiredFile.Flush()
$desiredFile.Close()
$zip.Dispose()
唯一剩下要做的事情就是用你的项目名称替换:
cd _Your.Project-CI\drop
,例如
cd _Weather.Front-CI\drop
。