.NET6 Razor项目添加控制器后RedirectToAction路由匹配失败
问题原因与解决方案
原因分析
- Razor Pages与MVC路由混淆:你在Razor Page的
PageModel里误用了RedirectToAction方法——这个方法是为MVC控制器设计的,用来跳转到MVC控制器的Action方法。而你的LOAD_AC只是OnGet方法的一个参数值,并非MVC的Action。之前项目里没有MVC控制器,框架做了兼容处理让错误调用暂时生效;添加API控制器后,路由系统严格区分Razor Pages和MVC路由,导致找不到匹配的MVC Action,抛出路由错误。 - API控制器语法错误:你添加的
SendData控制器代码末尾多了一个多余的大括号},虽不直接引发路由错误,但会影响项目编译。 - API控制器未注册路由:你的
program.cs仅注册了Razor Pages路由,未添加API控制器的路由映射,导致API控制器无法被访问(非当前报错的直接原因,但属于必要修正)。
解决方案
1. 替换RedirectToAction为RedirectToPage
在OnPostCreate方法中,改用Razor Pages专属的RedirectToPage方法,传递页面路径和所需参数:
public IActionResult OnPostCreate() { if (DataSelected != null && DataSelected.Id == 0) { // 在数据库中创建新数据集 var res = CreateData(DataSelected, cn); if (res.Success) { // 跳转到当前页面的OnGet方法,传递id和action参数 // 若为当前页面,可简化为 return RedirectToPage(new { id = newID, action = "LOAD_AC" }); return RedirectToPage("./YourPageName", new { id = newID, action = "LOAD_AC" }); } } // 补充失败场景的返回逻辑 return Page(); }
注意:将YourPageName替换为你的Razor页面实际名称(如页面文件是Index.cshtml,则写"./Index")。
2. 修正API控制器语法错误
移除控制器代码末尾多余的大括号,并建议添加请求方式特性:
namespace MyProject.Controller { [Route("api/[controller]")] [ApiController] public class SendData : ControllerBase { [HttpGet] public IActionResult SendDataToSomewhere() { return Ok(); } } }
3. 注册API控制器路由(可选,若需使用API)
在program.cs的app.MapRazorPages();之前添加API路由映射:
app.MapControllers(); app.MapRazorPages();
以上修改既可以解决RedirectToAction的路由错误,也能保证API控制器正常工作。
内容的提问来源于stack exchange,提问作者Sebastian Neubner
相关产品推荐
相关产品推荐

