代码之家  ›  专栏  ›  技术社区  ›  Roman Pokrovskij Archil Labadze

ASP核心:如何路由到位于区域文件夹中的API控制器?

  •  2
  • Roman Pokrovskij Archil Labadze  · 技术社区  · 7 年前

    结构:

    + MyProj
       + Areas
           + Configuration
              - Pages
              - ConfigurationApiController.cs
    

    VS2017建议创建不带控制器的控制器文件夹,我可以使用Razor页面,不需要控制器文件夹:

    enter image description here

    这些不起作用:

    控制器定义:

    [Route("api")]
    [Produces("application/json")]
    [ApiController]
    public class ConfigurationApiController : ControllerBase
    {
        private readonly ApplicationSettings applicationSettings;
        [HttpGet]
        public ActionResult GetUsers()
        {
    

    MVC路由配置标准方式:

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

    如何路由到配置picontroller的getusers操作?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Laksmono    7 年前

    修改api路由并添加area属性以提供[area]路由的区域名称。

        [Area("Configuration")]
        [Route("[area]/api/[controller]")]
        [ApiController]
        public class ConfigurationApiController : ControllerBase
        {
        }
    

    仅此而已,您可以在 http://localhost:8080/Configuration/api/ConfigurationApi

        2
  •  1
  •   Roman Pokrovskij Archil Labadze    7 年前

    其他一些路由选择:

    1. 找到的工作选项 AspNetCore.RouteAnalyzer : http://localhost:8080/api (是,不采取行动)

    2. 删除Web API属性后

       // [Route("api")]
       // [Produces("application/json")]
       // [ApiController]
    

    然后 http://localhost:8080/ConfigurationApi/GetUsers

    可以,但路由中没有区域,而且“按约定路由到区域”似乎不起作用,这是ASP核心: ASP Core: how to configure area for api controller without AreaAttribute (or how to enable convention area routing for Api controller)? https://github.com/aspnet/AspNetCore/issues/7042

    在这种情况下 ContentResult { Content = json, ContentType = "application/json" } 应该返回,但这对我来说是可以的,因为我更喜欢使用就地序列化而不是流序列化程序。

    1. 这条路线通向 http://localhost:8080/Configuration/api
        [Area("Configuration")]
        [Route("[area]/api")] 
        [Produces("application/json")]
        [ApiController]
    

    其他选项:【路由(【区域】/api/【操作】)]路由到 http://localhost:8080/Configuration/api/GetUsers

    移除区域属性时引发运行时错误 Error: While processing template '[area]/api', a replacement value for the token 'area' could not be found. Available tokens: 'action, controller'. To use a '[' or ']' as a literal string in a route or within a constraint, use '[[' or ']]' instead.

        //[Area("Configuration")]
        [Route("[area]/api")]
        [Produces("application/json")]
        [ApiController]
    
    推荐文章