ASP.NET Core 2.0中Survey/Conditions路由返回404问题求助
解决ASP.NET Core 2.0路由404问题
我帮你梳理下问题所在,主要是路由配置和代码细节的问题:
核心问题:特性路由与访问路径不匹配
你的SurveyController里的GetConditions方法使用了[HttpGet("conditions")]特性,但这个特性定义的路由是**/conditions**(因为控制器没有添加路由前缀特性),而你尝试访问的是/Survey/conditions,这就导致了404错误——请求路径和方法的路由不匹配。
两种修复方案:
给控制器添加路由前缀(推荐,符合RESTful风格)
在控制器类上添加[Route("[controller]")]特性,这样控制器下的所有方法路由都会自动带上控制器名称前缀:[Route("[controller]")] public class SurveyController : Controller { public IActionResult Index() { var surveys = new List<int>{1}; return View(surveys); // 注意这里变量名大小写修正 } [HttpGet("conditions")] public IActionResult GetConditions() { List<int> Conditions = new List<int>{1}; // 修正语法错误 return View("Conditions",Conditions); } }此时
GetConditions的路由就变成了/Survey/conditions,和你访问的路径完全匹配。直接修改HttpGet特性的路由模板
如果你不想给控制器加前缀,可以直接在HttpGet里指定完整的路径:[HttpGet("Survey/conditions")] public IActionResult GetConditions() { // ... 代码 }
额外需要修正的代码错误
除了路由问题,你的代码里还有两处语法/拼写错误,这些错误可能导致编译失败或运行时异常,也需要一并修复:
Index方法中,返回视图时用了大写的Surveys,但定义的变量是小写的surveys,应该改为return View(surveys);GetConditions方法中,创建List时少了闭合的>,正确写法是List<int> Conditions = new List<int>{1};
关于Startup.cs的路由配置
你的默认路由配置是正常的:
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });
不过需要注意:特性路由(比如[HttpGet])的优先级高于默认路由,所以只要特性路由配置正确,就能优先命中对应的方法。
修复后,重新编译运行,访问/Survey/conditions就能正常返回对应的视图了。
内容的提问来源于stack exchange,提问作者Joy
相关产品推荐
相关产品推荐

