asp.net core web api center маршрутизация

У меня проблема, связанная с маршрутизацией ядра asp.net. Я знаю, что мы можем использовать маршрутизацию атрибутов, но я не нашел ничего, связанного с центральной маршрутизацией, например asp.net web api.
Что-то вроде ниже:

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

);

Не могли бы вы поделиться со мной, как достичь вышеуказанной функции в ядре asp.net? Если нет встроенной функции, сможет ли служба настраиваемой маршрутизации добиться этого?
С уважением,
Эдвард


person Edward    schedule 17.02.2017    source источник


Ответы (2)


центральная маршрутизация поддерживается для веб-API, но нам нужно отключить маршрут атрибута в веб-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?}");
    });

Контроллер веб-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

person Edward    schedule 22.03.2017

Вы можете настроить маршруты как опции для промежуточного программного обеспечения 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. Единая модель.

person Pradeep Kumar    schedule 19.02.2017