Я новичок в .NET Core и ASP.NET Core MVC, раньше я работал с .NET 4. x и ASP.NET MVC 5, поэтому будьте терпеливы, если я спрашиваю что-то очевидное; Никаким поиском я не смог найти ответ.
Использованный материал:
- .NET 8
ASP.NET Core MVC - jQuery
Код: Выделить всё
[Area("SomeArea")]
public class SomeNameController : Controller
{
public SomeNameController(..injected stuff...) { }
[HttpGet]
public PartialViewResult AddDialog()
{
// ...
}
[HttpPost]
public async Task AddDialog(MyDialogModel dialogModel)
{
// ...
}
[HttpDelete]
[Route("DoSomeDeletion/{uniqueIdentifier}")]
public async Task DoSomeDeletion(int uniqueIdentifier)
{
// ...
return Json(result);
}
}
Код: Выделить всё
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapBlazorHub();
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=index}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=index}/{action=Index}/{id?}");
endpoints.MapFallbackToPage("/_Host");
});
Код: Выделить всё
$("#MyGrid").on('click', '.js-delete-btn', function (e) {
e.preventDefault();
var url = this.href,
data = $("#GridForm").serializeObject();
$.ajax({
method: "DELETE",
url: url,
data: data
})
.done(function (jqXHR, textStatus) {
toastr.success("Yay! Deleted successfully", null, {
timeout: 5000,
onHidden: function () { window.location.reload(); }
});
})
.fail(function (jqXHR, textStatus, errorThrown) {
toastr.error("Uh-oh something went wrong", null, { timeout: 5000 });
});
});
Код: Выделить всё
/SomeArea/SomeName/DoSomeDeletion/356
< Strong>Проблема
Если я установлю точку останова в методе действия DoSomeDeletion, она никогда не будет достигнута. Однако если я удалю из него атрибут Route, он будет обработан.
Что я пробовал
- Я пробовал использовать [HttpPost] вместо [HttpDelete]
- Для обоих HttpDelete и HttpPost, я использовал перегрузку, которая позволяет указать шаблон маршрута, аналогичный атрибуту Route.
- Если я изменю URL-адрес, чтобы идентификатор был строкой запроса, например. ?uniqueIdentifier=365, тогда оно будет применено к действию, и значение будет привязано к параметру действий.
- Удаление атрибута маршрута, чтобы действие было выполнено. Я вижу, что Request.RouteValues имеет {id} значение, которое установлено на значение из URL-адреса, который я сделал УДАЛИТЬ вызов AJAX.
Вопрос
Я не использовал атрибуты для маршрутизацию раньше, так что, возможно, я что-то упускаю, но в ASP.NET MVC 5 на .NET 4.8 у меня никогда не было подобных проблем, я мог получить одно или несколько значений маршрута из URL-адреса и называть их так, как я хотел.< /p>
Что происходит? Почему я не могу использовать имена значений маршрутов, которые хочу использовать?
Подробнее здесь: https://stackoverflow.com/questions/781 ... er-than-id