Я создаю приложение ASP.NET Core MVC, используя представления Razor и модальные окна Bootstrap для форм Вход и Регистрация.
При отправке форм я постоянно получаю
HTTP 405 – метод не разрешен.
Это потому, что на странице razor есть встроены две формы? Я пробовал изменить атрибуты маршрута, но это все еще не работало. Могут ли две формы внутри одной страницы быть проблемой и их отображение на разных страницах Razor решит проблему?
Контроллер
using Chance_Profit.Models;
using Microsoft.AspNetCore.Mvc;
namespace Chance_Profit.Controllers
{
public class HomeController : Controller // no ApiController
{
[HttpGet]
public IActionResult Index()
{
ViewData["Title"] = "Chance Profit - Home";
return View();
}
[HttpPost("login")]
[ValidateAntiForgeryToken]
public IActionResult Login(IndexViewModel model)
{
Console.WriteLine("Login action invoked");
if (!ModelState.IsValid)
{
ViewData["Title"] = "Chance Profit - Home";
return View("Index", model);
}
// TODO: Perform login logic
return RedirectToAction(nameof(Dashboard));
}
[HttpPost("register")]
[ValidateAntiForgeryToken]
public IActionResult Register(IndexViewModel model)
{
if (!ModelState.IsValid)
{
ViewData["Title"] = "Chance Profit - Home";
return View("Index", model);
}
// TODO: Perform registration logic
return RedirectToAction(nameof(Dashboard));
}
[HttpGet]
public IActionResult Dashboard()
{
ViewData["Title"] = "Chance Profit - Dashboard";
return View();
}
}
}
Страница Razor
@model Chance_Profit.Models.IndexViewModel
@{
ViewData["Title"] = ViewData["Title"] ?? "Chance Profit";
}
Chance Profit
@ViewData["Title"]
Login
Register
Login
Close
Login
@Html.AntiForgeryToken()
Register
Close
Register
@Html.AntiForgeryToken()
@section Scripts {
}
Обработка входа
window.onload = function () {
let lform = document.getElementById("login");
lform.addEventListener("submit", function (event) {
event.preventDefault();
});
let rform = document.getElementById("register");
rform.addEventListener("submit", function (event) {
event.preventDefault();
});
}
function handleLogin() {
console.log("Login form submitted");
let lform = document.getElementById("login");
lform.submit();
}
Program.cs
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapStaticAssets();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}")
.WithStaticAssets();
app.Run();
Подробнее здесь: https://stackoverflow.com/questions/798 ... when-using