删除未被击中的路线
Delete route not being hit
与这个问题作斗争太久了,现在是寻求帮助的时候了。我的 .net 核心 mvc 应用程序的删除路由没有被命中。所有其他路线(Get,Post)都很好。启动时的路由配置如下所示:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}");
});
表单提交看起来像这样:
<a class="btn btn-primary" href="~/DisabledRegistrations/Delete/@(Model.Id)">Confirm</a>
控制器方法如下所示:
[Authorize]
[HttpDelete]
public async Task<IActionResult> Delete(string id)
{
...
}
但是用类似的东西击中它:
https://localhost:8307/DisabledRegistrations/Delete/f17dff6b3fcd43ba89eab4bbad5c992e
结果:
No webpage was found for the web address:
https://localhost:8307/DisabledRegistrations/Delete/f17dff6b3fcd43ba89eab4bbad5c992e
我们 运行 在 Service Fabric 中,不确定是否有任何细节。我们的 web.config 有这个,但不确定它是否与该上下文相关:
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
非常感谢任何有关尝试的提示。
更新:
如果我确实提交了如下表格:
<form asp-controller="DisabledRegistrations" asp-action="Delete" method="delete" asp-route-id="@Model.Id">
<div class="text-right">
<button type="submit" class="btn btn-primary">Confirm</button>
<a class="btn btn-primary" href="~/DisabledRegistrations/Index">Cancel</a>
</div>
</form>
然后我仍然得到:
No webpage was found for the web address:
https://localhost:8307/DisabledRegistrations/Delete/f17dff6b3fcd43ba89eab4bbad5c992e?__RequestVerificationToken=CfDJ8KwmDf2MXHlGrC8zIIntu4IV_83R9jSBwPqk3w8Ymq2VoBnQHN8lxEOHqMUfJwtxX-HLZwr6AWw8uKiVaSz7l-CZjPzZ_IxJhRh31MYiwbgsJzLcQMvrHWGd_sueZ8OLKbRAoYGeVHLfVfkjac-TCaLE9CoOYSCyhY4EDtrFhiLVY3_3h-bJTSLYTT2E7qXcvA
[HttpDelete]
是一个类似于 post 的动词,您没有从 link 中执行 http delete,它只是在执行 http get,因此它与您的路由不匹配。要删除动词,您必须使用 ajax 并指定动词。
您没有提交表单,您只显示了一个元素,link因此无法删除动词
我不完全确定您为什么要使用表单来执行此操作。 标签将很容易地为您做到这一点。
<div class="text-right">
<a class="btn btn-primary" asp-controller="DisabledRegistrations" asp-action="Delete" asp-route-id="@Model.Id">Confirm</a>
<a class="btn btn-primary" href="~/DisabledRegistrations/Index">Cancel</a>
</div>
与这个问题作斗争太久了,现在是寻求帮助的时候了。我的 .net 核心 mvc 应用程序的删除路由没有被命中。所有其他路线(Get,Post)都很好。启动时的路由配置如下所示:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action}/{id?}");
});
表单提交看起来像这样:
<a class="btn btn-primary" href="~/DisabledRegistrations/Delete/@(Model.Id)">Confirm</a>
控制器方法如下所示:
[Authorize]
[HttpDelete]
public async Task<IActionResult> Delete(string id)
{
...
}
但是用类似的东西击中它:
https://localhost:8307/DisabledRegistrations/Delete/f17dff6b3fcd43ba89eab4bbad5c992e
结果:
No webpage was found for the web address:
https://localhost:8307/DisabledRegistrations/Delete/f17dff6b3fcd43ba89eab4bbad5c992e
我们 运行 在 Service Fabric 中,不确定是否有任何细节。我们的 web.config 有这个,但不确定它是否与该上下文相关:
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
非常感谢任何有关尝试的提示。
更新:
如果我确实提交了如下表格:
<form asp-controller="DisabledRegistrations" asp-action="Delete" method="delete" asp-route-id="@Model.Id">
<div class="text-right">
<button type="submit" class="btn btn-primary">Confirm</button>
<a class="btn btn-primary" href="~/DisabledRegistrations/Index">Cancel</a>
</div>
</form>
然后我仍然得到:
No webpage was found for the web address:
https://localhost:8307/DisabledRegistrations/Delete/f17dff6b3fcd43ba89eab4bbad5c992e?__RequestVerificationToken=CfDJ8KwmDf2MXHlGrC8zIIntu4IV_83R9jSBwPqk3w8Ymq2VoBnQHN8lxEOHqMUfJwtxX-HLZwr6AWw8uKiVaSz7l-CZjPzZ_IxJhRh31MYiwbgsJzLcQMvrHWGd_sueZ8OLKbRAoYGeVHLfVfkjac-TCaLE9CoOYSCyhY4EDtrFhiLVY3_3h-bJTSLYTT2E7qXcvA
[HttpDelete]
是一个类似于 post 的动词,您没有从 link 中执行 http delete,它只是在执行 http get,因此它与您的路由不匹配。要删除动词,您必须使用 ajax 并指定动词。
您没有提交表单,您只显示了一个元素,link因此无法删除动词
我不完全确定您为什么要使用表单来执行此操作。 标签将很容易地为您做到这一点。
<div class="text-right">
<a class="btn btn-primary" asp-controller="DisabledRegistrations" asp-action="Delete" asp-route-id="@Model.Id">Confirm</a>
<a class="btn btn-primary" href="~/DisabledRegistrations/Index">Cancel</a>
</div>