You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 2.0中Survey/Conditions路由返回404问题求助

解决ASP.NET Core 2.0路由404问题

我帮你梳理下问题所在,主要是路由配置和代码细节的问题:

核心问题:特性路由与访问路径不匹配

你的SurveyController里的GetConditions方法使用了[HttpGet("conditions")]特性,但这个特性定义的路由是**/conditions**(因为控制器没有添加路由前缀特性),而你尝试访问的是/Survey/conditions,这就导致了404错误——请求路径和方法的路由不匹配。

两种修复方案:

  1. 给控制器添加路由前缀(推荐,符合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,和你访问的路径完全匹配。

  2. 直接修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:54:30