如何解决 MVC 5 更新和删除错误
How to solve MVC 5 Update and Delete Error
我已经在 .net 4.7.2 中构建了 MVC 5 Web 应用程序。它在我的本地机器上运行良好。更新和删除命令失败,我现在已经解决了这个问题 post:DELETE/PUT verbs result in 404 Not Found in WebAPI, only when running locally,我将这一行添加到 web.config,现在所有的 CRUD 都可以工作了:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0
但是,当我将应用程序发布到我的托管服务器时,它在 web.config 中的这一行中断。
当我删除该行时,只有创建和检索数据有效,但更新和删除失败并出现错误:
Object reference not set to an instance of an object.
at this line in the Index view: Line 40: @For Each item In Model
我理解这是因为此时模型是 null/nothing。
这是我的删除函数,显示错误开始的位置...
Public Function Delete(ByVal id As Integer) As ActionResult
Dim Client As HttpClient = New HttpClient()
Client.BaseAddress = New Uri(myWeb & "AppMenuCRUD")
Dim APIConsumer = Client.DeleteAsync("AppMenuCRUD/" & id.ToString())
APIConsumer.Wait()
Dim Result = APIConsumer.Result << failure here: Error 404
If Result.IsSuccessStatusCode Then
Return RedirectToAction("Index")
End If
Return View("Index")
End Function
托管服务器是 运行 Windows Server 2016,.Net 4.7.2。我已启用 read/write 到网站文件夹。
这是我在托管服务器中的 IIS 设置:
更新:
- 进一步研究后,我的托管服务器现在已更新到 .net 4.8,现在一切都失败了。我现在甚至无法加载索引视图页面。它在与上面相同的第 40 行中断。
- 在 IIS 中,我的应用程序池设置为集成的 .net 4.0。我从下拉列表中看不到任何更高的东西。
- 在 IIS 中,我没有在 HTTP 动词列表中过滤任何内容,我认为这意味着它应该接受任何内容。
更新 2
- 更新到 .net 4.8 后,我现在收到一个新错误
Lock Violation
我已启用 IIS 中的所有内容,包括将所有 ASP 配置从只读更改为 Read/Write。
我担心我可能会给 VPS...
引入漏洞
我还需要做些什么才能让它工作吗?
有时您需要在更改目标框架时手动更新 Web.config
,请仔细检查这些行:
<system.web>
<compilation debug="true" targetFramework="4.8">
<httpRuntime targetFramework="4.8" />
...
所以,这就是我最终让它工作的方式:
- 我以 'control cpanel' 的身份使用 Plesk 进行托管。显然,Plesk 有一些我必须在这里解锁的锁:
Plesk > Tools & Settings > Security > Prohibit the ability to override handlers
感谢https://support.plesk.com/hc/en-us/articles/115000287305-Site-shows-500-19-Internal-Server-Error-Config-Error-Lock-violation。我很惊讶我的房东竟然帮不了我!
在我的 VPS 中启用其他所有内容的过程中,我最终得到了 enabling/installing WebDAV。这显然也没有 'allow' Edit/Delete 动作。我没有卸载它,而是像这样从 web.config 中整理出来:
...
感谢
我已经在 .net 4.7.2 中构建了 MVC 5 Web 应用程序。它在我的本地机器上运行良好。更新和删除命令失败,我现在已经解决了这个问题 post:DELETE/PUT verbs result in 404 Not Found in WebAPI, only when running locally,我将这一行添加到 web.config,现在所有的 CRUD 都可以工作了:
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0
但是,当我将应用程序发布到我的托管服务器时,它在 web.config 中的这一行中断。 当我删除该行时,只有创建和检索数据有效,但更新和删除失败并出现错误:
Object reference not set to an instance of an object.
at this line in the Index view: Line 40: @For Each item In Model
我理解这是因为此时模型是 null/nothing。
这是我的删除函数,显示错误开始的位置...
Public Function Delete(ByVal id As Integer) As ActionResult
Dim Client As HttpClient = New HttpClient()
Client.BaseAddress = New Uri(myWeb & "AppMenuCRUD")
Dim APIConsumer = Client.DeleteAsync("AppMenuCRUD/" & id.ToString())
APIConsumer.Wait()
Dim Result = APIConsumer.Result << failure here: Error 404
If Result.IsSuccessStatusCode Then
Return RedirectToAction("Index")
End If
Return View("Index")
End Function
托管服务器是 运行 Windows Server 2016,.Net 4.7.2。我已启用 read/write 到网站文件夹。
这是我在托管服务器中的 IIS 设置:
更新:
- 进一步研究后,我的托管服务器现在已更新到 .net 4.8,现在一切都失败了。我现在甚至无法加载索引视图页面。它在与上面相同的第 40 行中断。
- 在 IIS 中,我的应用程序池设置为集成的 .net 4.0。我从下拉列表中看不到任何更高的东西。
- 在 IIS 中,我没有在 HTTP 动词列表中过滤任何内容,我认为这意味着它应该接受任何内容。
更新 2
- 更新到 .net 4.8 后,我现在收到一个新错误
Lock Violation
我已启用 IIS 中的所有内容,包括将所有 ASP 配置从只读更改为 Read/Write。
我担心我可能会给 VPS...
引入漏洞我还需要做些什么才能让它工作吗?
有时您需要在更改目标框架时手动更新 Web.config
,请仔细检查这些行:
<system.web>
<compilation debug="true" targetFramework="4.8">
<httpRuntime targetFramework="4.8" />
...
所以,这就是我最终让它工作的方式:
- 我以 'control cpanel' 的身份使用 Plesk 进行托管。显然,Plesk 有一些我必须在这里解锁的锁:
Plesk > Tools & Settings > Security > Prohibit the ability to override handlers
感谢https://support.plesk.com/hc/en-us/articles/115000287305-Site-shows-500-19-Internal-Server-Error-Config-Error-Lock-violation。我很惊讶我的房东竟然帮不了我!
在我的 VPS 中启用其他所有内容的过程中,我最终得到了 enabling/installing WebDAV。这显然也没有 'allow' Edit/Delete 动作。我没有卸载它,而是像这样从 web.config 中整理出来:
...
感谢