1

我有一个问题与asp.net核心中心路由。我知道我们可以使用属性路由,但是我没有发现任何与中心路由相关的东西,比如asp.net web api。
类似下面:asp.net核心网络API中心路由

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

);

你能告诉我如何在asp.net核心中实现上述功能吗?如果没有内置功能,定制路由服务可以实现这个功能吗?
Regards,
Edward

回答

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

请求
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,控制器都是相同的。它是一个统一的模型。