Làm cách nào để thêm API Web vào dự án Ứng dụng web ASP.NET MVC (5) hiện có?


146

Giả sử bạn quên đánh dấu vào hộp kiểm API Web (thêm nó vào dự án) khi tạo dự án MVC (5) mới, bạn cần làm gì để thêm API Web và làm cho nó hoạt động?

Có một loạt các câu hỏi di chuyển, nhưng dường như không có câu hỏi nào đầy đủ và cập nhật để thêm API Web vào dự án MVC 5 và dường như nó đã thay đổi từ một số câu trả lời cũ.

Thêm API Web vào MVC 4

Thêm GlobalConfiguration.Configure (WebApiConfig.Register) MVC 4

Câu trả lời:


253

Cập nhật dự án MVC

Sử dụng Nuget để nhận API Web mới nhất.

Dự án - Nhấp chuột phải - Quản lý các gói Nuget - Tìm kiếm API Web (Microsoft Web Web API ...) và cài đặt nó vào dự án MVC của bạn.

Sau đó, bạn vẫn cần phải định tuyến API Web để hoạt động. Từ Microsoft Cấu hình ASP.NET Web API 2

Thêm WebApiConfig.cs vào thư mục App_Start /

using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // TODO: Add any additional configuration code.

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

        // WebAPI when dealing with JSON & JavaScript!
        // Setup json serialization to serialize classes to camel (std. Json format)
        var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        formatter.SerializerSettings.ContractResolver =
            new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
        }
    }
}

Nếu bạn có Dự án MVC, nó sẽ có Global.asax.cs , thêm các tuyến mới. Thứ tự của các tuyến Global.asax.cs là rất quan trọng. Lưu ý có những ví dụ lỗi thời sử dụng WebApiConfig.Register

Thêm dòng này vào Global.asax.cs: GlobalConfiguration.Configure(WebApiConfig.Register);

protected void Application_Start()
{
    // Default stuff
    AreaRegistration.RegisterAllAreas();

    // Manually installed WebAPI 2.2 after making an MVC project.
    GlobalConfiguration.Configure(WebApiConfig.Register); // NEW way
    //WebApiConfig.Register(GlobalConfiguration.Configuration); // DEPRECATED

    // Default stuff
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

Trợ giúp về WebAPI

Để có được các trang trợ giúp WebAPI ( rất ) hữu ích , hãy cài đặt WebAPI.HelpPage. Xem http://channel9.msdn.com/Events/Build/2014/3-644 (~ 42 phút) để biết những gì nó làm. Có vẻ rất hữu ích!

Bảng điều khiển Nuget: Install-Package Microsoft.AspNet.WebApi.HelpPage

Để xác minh WebAPI đang hoạt động:

Vào thư mục bộ điều khiển -> Thêm mục mới -> Lớp Trình điều khiển API Web.

public class TestController : ApiController
{
    //public TestController() { }

    // GET api/<controller>
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/<controller>/5
    public string Get(int id)
    {
        return "value";
    }
    //...
}

Bây giờ bạn có thể kiểm tra trong IE / FF / Chrome như bình thường hoặc trong bảng điều khiển JavaScript để không kiểm tra.

(Chỉ với bộ điều khiển trong URL, nó sẽ gọi hành động GET () trong Trình điều khiển API Web mới, nó sẽ tự động được ánh xạ tới các phương thức / hành động tùy thuộc vào REST, ví dụ PUT / POST / GET / DELETE. Bạn không cần gọi chúng bằng hành động như trong MVC) URL trực tiếp:

http://localhost:PORT/api/CONTROLLERNAME/

Hoặc sử dụng jQuery để truy vấn bộ điều khiển. Chạy dự án, Mở bàn điều khiển (F12 trong IE) và thử chạy truy vấn Ajax. (Kiểm tra PORT & CONTROLLERNAME của bạn)

$.get( "http://localhost:PORT/api/CONTROLLERNAME/", function( data ) {
    //$( ".result" ).html( data );
    alert( "Get data received:" + data);
});

Lưu ý bên lề: Có một số ưu / nhược điểm cần xem xét khi kết hợp MVC và Web API trong một dự án

WebAPI Trợ giúp xác minh: http://localhost:PORT/help


@Iko tôi đã làm mọi thứ mà bạn đã viết trên mã nhưng tôi đã gặp lỗi khi chạy nó. nó gây ra lỗi cho tôi
ninjaXnado

1
Hãy thử tìm kiếm thông báo lỗi. Các bước này về cơ bản là những gì được yêu cầu trong trường hợp chung.
lko

13
"Thứ tự của các tuyến Global.asax.cs là rất quan trọng" +1
Jim Aho

Tôi không thể hiểu cách kiểm tra nếu tôi thêm API Web chính xác? Chính xác thì tôi nên viết gì cho trình duyệt? Tôi đã viết http://localhost:12345/api/Get/5nhưng tôi đã có một lỗi.
jason

3
Tôi đã sử dụng "cách cũ" gọi WebApiConfig.Register (GlobalConfiguration.configuration); và tôi không thể gỡ lỗi nữa. Tôi sẽ bắt đầu gỡ lỗi và nó sẽ không bao giờ đạt đến các chức năng điều khiển của tôi. Tôi đã thay đổi thành "cách mới" GlobalConfiguration.Configure (WebApiConfig.Register); và vấn đề đã được khắc phục.
D. Kermott
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.