【问题标题】:HttpGet returns 404 in Mvc core 2.0HttpGet 在 Mvc core 2.0 中返回 404
【发布时间】:2018-01-22 14:57:05
【问题描述】:
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);
    }
}

现在视图下

Views/Survey/Index.cshtml

Views/Survey/Conditions.cshtml

路线Survey/conditions 正在返回404

有人知道吗?

我的 startup.cs 是 -

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseAuthentication();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });   
}

【问题讨论】:

  • 你要什么网址?
  • @Amy /survey/conditions
  • 我个人不使用HttpGet 进行路由,但您的代码不是将URL 设为/conditions 吗?以[HttpGet("/survey/conditions")] 为例
  • 我的理解是它来自顶级控制器级别。所以你想说当我们使用 just route 时它只是归结为条件?

标签: c# asp.net-core asp.net-core-mvc-2.0


【解决方案1】:

你对动作的属性:

[HttpGet("conditions")]

指定您希望 URL 为 http://whatever/conditions。相反,您应该使用:

[HttpGet("/survey/conditions")]

如果您希望以更好的粒度控制路由,则应改用Route 属性。例如:

[Route("[controller]")] //Set the prefix for subsequent route attributes
public class SurveyController : Controller
{
    [Route("conditions")]
    public IActionResult GetConditions()
    {
        List<int> Conditions = new List<int{1};
        return View("Conditions",Conditions);
    }
}

参考Routing to Controller Actions

【讨论】:

    【解决方案2】:

    试试这个:

    public class SurveyController : Controller
    {
        public IActionResult Index()
        {
            var surveys = new List<int>{1};
            return View(Surveys);
        }
    
        [HttpGet("conditions")]
        [Route("Survey/conditions")]
        public IActionResult GetConditions()
        {
            List<int> Conditions = new List<int{1};
            return View();
        }
    }
    

    或更改控制器中的函数名称:

    public class SurveyController : Controller
    {
        public IActionResult Index()
        {
            var surveys = new List<int>{1};
            return View(Surveys);
        }
    
        [HttpGet("conditions")]
        public IActionResult conditions()
        {
            List<int> Conditions = new List<int{1};
            return View();
        }
    }
    

    或者在浏览器的浏览器路由中写函数名:

    Route = 'Survey/GetConditions'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 2023-03-22
      • 2019-10-22
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多