Я работаю над приложением ASP.NET Core 2.1. Мне нужно вызвать обработчик именованной страницы через ajax.
Этот метод работает правильно, когда находится в режиме отладки / выпуска, но не удается, как только он опубликован в IIS.
Что я пробовал
- Теперь я использую @page "{handler?}" Вместо того, чтобы указывать обработчик в качестве параметра запроса
- Я убедился, что URL-адрес запроса правильный и что форма содержит "__RequestVerificationToken "
- Я изменил версию CLR пула приложений IIS на" Нет управляемого кода "
- Я изменил свой файл 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>
Код:
Это метод-обработчик, на других страницах есть похожие, и ни один из них не найден запросом 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 'form', который обеспечивает 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">×</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