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,控制器都是相同的。它是一個統一的模型。