Таблица с маршрути в 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)


Ако се опитвате да пренесете вашия Asp.Net Web API към MVC 6, трябва да имате Shim за съвместимост на уеб 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