Таблица маршрутов в MVC6 для веб-API не работает

У меня есть следующий код в Startup.cs:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "DefaultApi",
                template: "api/{controller=Customers}/{id?}");
        });
    }
}

… и объявил зависимость MVC в project.json:

{
    "webroot": "wwwroot",
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.AspNet.Server.IIS": "1.0.0-beta3",
        "Microsoft.AspNet.Mvc": "6.0.0-beta3"
    },
    "frameworks": {
        "aspnet50": { },
        "aspnetcore50": { }
    },
    "bundleExclude": [
        "node_modules",
        "bower_components",
        "**.kproj",
        "**.user",
        "**.vspscc"
    ],
    "exclude": [
        "wwwroot",
        "node_modules",
        "bower_components"
    ]
}

У меня есть следующий контроллер:

using Microsoft.AspNet.Mvc;
using System.Collections.Generic;

namespace WebApplication1.Controllers
{
    public class CustomersController : Controller
    {
        private List<Customer> _Customers = new List<Controllers.Customer>();

        public CustomersController()
        {
            _Customers.Add(new Customer() { ID = 1, Name = "Fred" });
            _Customers.Add(new Customer() { ID = 2, Name = "Bob" });
            _Customers.Add(new Customer() { ID = 3, Name = "Tim" });
        }

        public List<Customer> Get()
        {
            return _Customers;
        }

        public Customer Get(int ID)
        {
            Customer Customer = _Customers.Find(c => c.ID == ID);
            return Customer;
        }
    }

    public class Customer
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
}

… но когда я перехожу к /api/customers или /api/customers/1, я получаю 404 Not Found

Ам что-то не хватает? Поддерживается ли таблица маршрутов для веб-API в MVC6?


person Carl Rippon    schedule 24.03.2015    source источник


Ответы (2)


Если вы пытаетесь перенести свой веб-API Asp.Net на MVC 6, вам необходимо иметь Прокладка совместимости веб-API . Код класса запуска по умолчанию объясняет это

 // Uncomment the following line to add Web API servcies which makes it easier to port Web API 2 controllers.
 // You need to add Microsoft.AspNet.Mvc.WebApiCompatShim package to project.json
 // services.AddWebApiConventions();

По умолчанию он выключен. После включения вы можете настроить маршрут веб-API как

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

            // Uncomment the following line to add a route for porting Web API 2 controllers.
            // routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}");
        });

Подробнее здесь

person Rifaj    schedule 24.03.2015

Я немного опоздал, чтобы ответить на этот вопрос, но вам нужно поставить атрибут маршрутизации

[Route("api/[controller]")]

и удалить API из

template: "api/{controller=Customers}/{id?}");
person Thakur    schedule 02.07.2015