Как отправить PUT и DELETE формы в ASP.NET? - PullRequest
1 голос
/ 06 ноября 2019

Я некоторое время боролся с этим вопросом, прочитал несколько статей вроде:

Razor Pages AJAX FORM

MSDN ASP. NET Core RESTfull Web API

И не понял правильно.

В моем текущем проекте у меня есть:

  1. Форма на мой взгляд:
<form method="delete" asp-route="ProductCatalogSingle">
    <input hidden type="number" name="Id" value="@Model.Id" />
    <input type="submit" class="btn btn-dark" value="Delete" />
</form>
Что должно отправить запрос на удаление в мое действие:
// Controller have [Route("product-catalog")] attribute 

[HttpDelete("product", Name = "ProductCatalogSingle")]
public async Task<IActionResult> DeleteSingleItem(int id)
{
    // business-logic part responsible for data managment
    await logic.RemoveDataModelAsync(new ProductCatalog { Id = id });
    return RedirectToRoute("ProductCatalogAll");
}

// other action with same route, but different method
[HttpGet("product", Name = "ProductCatalogSingle")]
public async Task<IActionResult> SingleItem(int id)
{...}

В настройках по умолчанию это не работает - вместо этого загружается Get action.

Итак, я попыталсякуча вещей:

  1. Использование Fetch API, с "/product-catalog/product" и "@Url.Link("ProductCatalogSingle", null)" вместо url:
@section scripts{
    <script>
        document.forms[0].onsubmit = () => {
            let formData = new FormData(document.forms[0]);
            fetch(url, {
                method: "DELETE",
                body: new URLSearchParams(formData)
            })
                .then(() => {
                    alert('Deleted using Fetch');
                });
            return true;
        };
    </script>

Я получаю уведомление о предупреждении, нозапрос не отправлен.

Использование AJAX без бостуктивности:
@section scripts{
    <script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.js"></script>
}

<form method="delete" asp-route="ProductCatalogSingle" data-ajax="true" data-ajax-method="delete">
    <input hidden type="number" name="productId" value="@item.ProductId" />
     <input type="submit" class="btn btn-dark" value="Delete" />
</form>
Обычный JQuery AJAX
@section scripts{
<script>
    $(function () {
        $('#submit').on('click', function (evt) {
            evt.preventDefault();
            $.ajax({
                type: "DELETE",
                url: '/product-catalog/product?id=4001'
            });
        });
    });
</script>
Изменение переменных IIS Express Server, например Часто задаваемые вопросы IIS Express Состояния
<add name="ExtensionlessUrl-Integrated-4.0" ... verb="GET,HEAD,POST,DEBUG,PUT,DELETE"

Ничего из этого не сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...