ASP.NET MVC访问Register视图提示“资源无法找到”问题求助
解决「The Resource cannot be found」访问Register视图的问题
这问题我碰过好多次了,核心原因一眼就能看出来——你给Register方法加了[HttpPost]特性,但直接在浏览器地址栏输入localhost:port/Account/Register发起的是GET请求,MVC框架找不到能处理GET请求的Register Action,自然就抛出「资源无法找到」的错误。
为什么Login能正常访问?
因为你的Login Action要么没加任何HTTP特性(默认支持GET和POST请求),要么明确标记了[HttpGet],所以GET请求进来时能匹配到对应的方法,正常返回视图。
解决方案
根据你的需求,有两种处理方式:
1. 允许用户通过URL直接访问Register页面(最常见场景)
你需要给AccountController添加一个处理GET请求的Register方法,同时保留现有的POST方法处理表单提交:
// 处理GET请求,返回注册页面 [HttpGet] public ActionResult Register() { // 直接返回Register视图,也可以初始化一个空的LoginModel传递给视图 return View(); } // 处理POST请求,接收注册表单数据 [HttpPost] public ActionResult Register(LoginModel model) { // 这里写你的注册逻辑:验证模型、保存用户信息等 if (ModelState.IsValid) { // 注册成功后跳转,比如回到登录页或首页 return RedirectToAction("Login"); } // 模型验证失败,返回视图并保留用户输入的内容 return View(model); }
2. 仅通过POST请求访问Register(不推荐,除非有特殊业务逻辑)
如果你的业务场景不需要用户直接打开注册页面,只允许通过表单POST提交数据,那你需要检查页面上的跳转逻辑——比如是不是从Login页面的链接错误地发起了GET请求到Register,这时候要把链接改成表单POST或者调整跳转逻辑。但这种场景非常少见,一般注册页面都需要用户能通过GET请求打开。
额外提示
MVC的Action匹配规则是:优先匹配带有和请求方法(GET/POST)对应的特性的Action,如果没有找到,再匹配没有标记任何HTTP特性的Action(这类Action默认支持所有HTTP方法)。所以你之前的Register只标记了[HttpPost],GET请求进来时就找不到对应的处理方法了。
内容的提问来源于stack exchange,提问作者Constantin M
相关产品推荐
相关产品推荐

