【问题标题】:Route configuration in ASP CoreASP Core 中的路由配置
【发布时间】:2016-04-10 20:01:35
【问题描述】:

我在 ASP Core 中配置路由时遇到问题。

Startup.cs 中我使用默认配置:services.AddMvc()ConfigureServices()app.UseMvc()Configure()

现在我在同一个程序集中有一个简单的控制器:

[Route("/api/[controller]")]
public class TestController: Controller
{
    [HttpGet]
    public string Test()
    {
        return "Hello";
    }
}

请求/api/test/test 不会触发

但如果我添加[HttpGet("test")][Route("test")] 效果很好。

但是,如果没有指定路由属性,我希望支持约定优于配置

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

    尝试使用:

    [Route("api/[controller]/[action]")]
    

    【讨论】:

    • 这很奇怪,因为我比其他任何人都尝试过这种方法。谢谢
    【解决方案2】:

    当你给Controller添加[Route("/api/[controller]")]注解时,Startup.cs中配置的默认路由会忽略这个Controller。

    因此,您需要为控制器内的每个操作指定 URL 后缀 ,方法是在它们上方添加 [Route("")] 属性:

    [Route("/api/[controller]")]
    public class TestController: Controller
    {
        [Route("test")]
        [HttpGet]
        public string Test()
        {
            return "Hello";
        }
    }
    

    在控制器注释中指定路由应使用 动作名称 作为 URL 的一部分:

    [Route("/api/[controller]/[action]")]
    public class TestController: Controller
    {
        [HttpGet]
        public string Test()
        {
            return "Hello";
        }
    }
    

    【讨论】:

      【解决方案3】:
           [Route("/api/[controller]")]
       public class TestController: Controller
       {
          [HttpGet(namOf(Test),Name=namOf(Test))]
          public string Test()
          {
              return "Hello";
          }
       }
      

      【讨论】:

      • 欢迎来到 StackOverflow!虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
      猜你喜欢
      • 2020-10-13
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      相关资源
      最近更新 更多