【问题标题】:asp.net core web api center routingasp.net core web api中心路由
【发布时间】:2017-02-17 09:29:48
【问题描述】:

我有一个与 asp.net 核心中心路由 相关的问题。我知道我们可以使用属性路由,但我没有找到任何与中心路由相关的东西,比如 asp.net web api。
如下所示:

routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }

);

你能分享我如何在asp.net core中实现上述功能吗?如果没有内置功能,自定义路由服务可以实现吗?
问候,
爱德华

【问题讨论】:

    标签: asp.net-mvc-routing asp.net-core-webapi asp.net-core-routing


    【解决方案1】:

    web api 支持中心路由,但是我们需要在 web api 上禁用属性路由。
    路线:

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

    Web API 控制器:

        //[Route("api/[controller]")]
        //[Authorize]
        public class ValuesController : Controller
        {
            private ApplicationDbContext _db;
            public ValuesController(ApplicationDbContext db)
            {
                _db = db;
            }
            // GET: api/values
            //[HttpGet]
            public IEnumerable<string> GetAll()
            {
                var result = from user in _db.UserInfos
                             select user.UserName;
                return result.ToList();
                //return new string[] { "value1", "value2" };
            }
            // GET api/values/5
            //[HttpGet("{id}")]        
            public string GetById(int id)
            {
                var result = from user in _db.UserInfos
                             select user.UserName;
                return result.FirstOrDefault();
                //return User.Identity.IsAuthenticated.ToString(); //"value";
            }
    }
    

    这可以由http://localhost:44888/api/values/getbyid/123提出请求

    【讨论】:

      【解决方案2】:

      您可以将路由配置为 MVC 中间件的选项。将路由添加到启动类中的配置方法

      public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
      {
          app.UseMvc(routes =>
          {
              routes.MapRoute("blog", "api/{*article}",
              defaults: new { controller = "Blog", action = "Article" });
              routes.MapRoute(
                  name: "default",
                  template: "{controller=Home}/{action=Index}/{id?}");
          });
      
      }
      

      请注意,在 ASP.NET 中,MVC 和 API 的控制器是相同的。它是一个统一的模型。

      【讨论】:

        猜你喜欢
        • 2018-08-28
        • 1970-01-01
        • 1970-01-01
        • 2018-08-25
        • 1970-01-01
        • 2017-02-03
        • 2020-03-23
        • 2017-04-13
        • 2017-11-20
        相关资源
        最近更新 更多