向ASP.NET核心控制器提交表单时收到HTTP 405错误

cyej8jka  于 2023-10-21  发布在  .NET
关注(0)|答案(2)|浏览(145)

我在ASP.NET Core应用程序中遇到了一个问题,当我试图将表单提交给控制器操作时,我收到了一个HTTP 405错误。我已经检查了我的代码和配置,但无法确定问题的根本原因。以下是详细信息:
我在ASP.NETCore应用程序中有一个表单,用于处理用户登录。表单被配置为使用POST方法,它应该将用户的电子邮件和密码提交给名为“login”的控制器操作。
HTML表单:

@{
    ViewData["Title"] = "Sign In";
}

<h2>Sign In</h2>

<form asp-action="login" asp-controller="Home" method="post">
    <div class="form-group">
        <label>Email</label>
        <input name="email" class="form-control" />
    </div>
    <div class="form-group">
        <label>Password</label>
        <input name="password" type="password" class="form-control" />
    </div>
    <button type="submit" class="btn btn-primary">Sign In</button>
</form>

控制器操作:

[HttpPost]
        public IActionResult login(string email, string password)
        {
            var user = _context.Users.SingleOrDefault(u => u.email == email && u.password == password);
            if (user != null)
            {
                return RedirectToAction("Index");
            }
            ModelState.AddModelError(string.Empty, "Invalid login attempt.");
            return View();
        }

    }
}

Program.cs:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Routing.Constraints;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using signIn_form.Models;

var builder = WebApplication.CreateBuilder(args);


builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddControllersWithViews();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

当我提交表单时,我收到一个HTTP 405错误,消息是“此页面无法工作。如果问题仍然存在,请联系网站所有者。HTTP ERROR 405.”我已经验证了“login”action是否正确地使用[HttpPost]属性修饰以处理POST请求。HTML表单指定了正确的方法=“post”。控制器和action名称没有明显的问题。ASP.NET Core版本:7.0.3
我将非常感谢任何关于如何解决这个问题的见解或建议。如果您需要更多的代码或配置细节,请告诉我,我会及时提供。
谢谢您的帮助!

wydwbb8l

wydwbb8l1#

看起来你还没有为登录端点设置路由?根据文档,你应该在Program.cs文件中设置一个常规路由,或者在你的控制器上使用属性(你可能已经这样做了,但是你没有包括整个代码,所以我不知道)。405表示服务器接收到请求,但无法将其Map到函数。

hvvq6cgz

hvvq6cgz2#

<form asp-action="login" asp-controller="Home" method="post">
请使用浏览器F12开发工具检查html源代码,并检查上面带有asp-actionasp-controller属性的Form Tag Helper是否按预期呈现为action="/Home/login"
此外,出于测试目的,您可以尝试使用HTML表单而不是ASP.NET Core Form Tag Helper,如下所示。并检查请求是否可以发送到目标端点。

<form method="post" action="/Home/login">
    <div class="form-group">
        <label>Email</label>
        <input name="email" class="form-control" />
    </div>
    <div class="form-group">
        <label>Password</label>
        <input name="password" type="password" class="form-control" />
    </div>
    <button type="submit" class="btn btn-primary">Sign In</button>
</form>

相关问题