asp.net核心web api中心路由

时间:2017-02-17 09:29:49

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

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

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

);

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

2 个答案:

答案 0 :(得分:1)

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

中的configure方法
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的控制器都是相同的。它是一个统一的模型。

答案 1 :(得分: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

请求