gpt4 book ai didi

c# - Razor Pages POST 处理程序在 IIS 上返回 404

转载 作者:行者123 更新时间:2023-12-05 06:23:27 27 4
gpt4 key购买 nike

我正在开发 ASP.NET Core 2.1 应用程序。我需要通过 ajax 调用命名页面处理程序。

该方法在调试/发布时工作正常,但一旦发布到 IIS 就会失败。

我尝试过的

  • 我现在使用@page "{handler?}"而不是将处理程序指定为查询参数
  • 我已确保请求 url 正确,并且表单包含“__RequestVerificationToken”
  • 我已将 IIS 应用程序池 CLR 版本更改为“无托管代码”
  • 我已将 web.config 修改为如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\MyApp.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</location>
</configuration>

代码:

这个是handler方法,其他页面也有类似的方法,ajax请求都找不到(但同样,只有在部署到IIS后才会出现):

[HttpPost]
public IActionResult OnPostExampleHandler([FromForm]ExampleHandlerModel model)
{
// ...

return new JsonResult(new { data, message });
}

这是在提交时调用的 javascript 代码:

function submitForm()
{
return $.ajax(
{
type: "POST",
url: "/relativeURL/ExampleHandler",
data: $('#ExampleHandlerForm').serialize(),
dataType: "json",

complete: function (res)
{
// do something on completion
}
});
}

最后这是 Html/Razor 代码,我正在使用“表单”TagHelper,它确保在序列化表单时存在 AntiForgeryToken:

<form method="post" asp-page-handler="ExampleHandler" id="ExampleHandlerForm">

<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">@Model.Details.Description</h5>
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body form-row">

@* Input Fields *@

</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">@Lang.Operations.Close</button>
<button type="button" onclick="submitForm();" class="btn btn-primary">@Lang.Operations.Save</button>
</div>
</div>

</form>

错误信息

POST http://root:port/relativeURL/ExampleHandler 404 (Not Found)
send @ jquery.min.js:2
ajax @ jquery.min.js:2
submitForm @ VM106:13
onclick @ 5:1

最佳答案

为我工作。

  1. 将 [IgnoreAntiforgeryToken(Order = 1001)] 添加到 PageModel。即使您的项目中禁用了 AntiforgeryTokens。
  2. 从 url 的开头删除“/”,在这种情况下浏览器将针对当前页面发出请求,因此您无需对整个路径进行硬编码。

例子:

url: 'NameOfPageModel?handler=NameOfHandler'

不要忘记从处理程序名称中删除前缀 OnPost 和后缀 Async(如果存在)。

关于c# - Razor Pages POST 处理程序在 IIS 上返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com