我在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
我将非常感谢任何关于如何解决这个问题的见解或建议。如果您需要更多的代码或配置细节,请告诉我,我会及时提供。
谢谢您的帮助!
2条答案
按热度按时间wydwbb8l1#
看起来你还没有为登录端点设置路由?根据文档,你应该在
Program.cs
文件中设置一个常规路由,或者在你的控制器上使用属性(你可能已经这样做了,但是你没有包括整个代码,所以我不知道)。405表示服务器接收到请求,但无法将其Map到函数。hvvq6cgz2#
<form asp-action="login" asp-controller="Home" method="post">
请使用浏览器F12开发工具检查html源代码,并检查上面带有
asp-action
和asp-controller
属性的Form Tag Helper是否按预期呈现为action="/Home/login"
。此外,出于测试目的,您可以尝试使用HTML表单而不是ASP.NET Core Form Tag Helper,如下所示。并检查请求是否可以发送到目标端点。