Обработчик POST Razor Pages возвращает 404 на IIS - PullRequest
1 голос
/ 09 октября 2019

Я работаю над приложением 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">&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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...