2016-08-29 46 views
7

Tôi đang cố gắng sử dụng Bộ điều khiển MVC và bộ điều khiển WebAPI trong cùng một dự án nhưng tôi gặp lỗi 404 cho webapi. Tôi đã bắt đầu dự án với tư cách là dự án MVC vào năm 2015 nhưng sau đó thêm control webapi và với mã mặc định, nó sẽ đưa ra lỗi 404Làm thế nào để sử dụng Bộ điều khiển MVC và Bộ điều khiển WebAPI trong cùng một dự án

giải pháp có thể là gì. Tôi đã thử một số giải pháp về Stackoverflow nhưng họ đã không làm việc một trong số họ là bên dưới liên kết (Được chấp nhận trả lời đằng kia) All ASP.NET Web API controllers return 404

Global.asax file Code:

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configure(WebApiConfig.Register);//WEB API 1st 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 

     } 

WEBAPI.CONFIG fILE

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      config.MapHttpAttributeRoutes(); 

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

     } 
    } 

Route Config file Mã

public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

     } 
    } 

WebAPI khiển MÃ

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using O365_APIs_Start_ASPNET_MVC.Models; 
using Microsoft.IdentityModel.Clients.ActiveDirectory; 
using O365_APIs_Start_ASPNET_MVC.Helpers; 
using System.Threading.Tasks; 

namespace O365_APIs_Start_ASPNET_MVC.Controllers 
{ 
    public class MAILAPIController : ApiController 
    { 
     private MailOperations _mailOperations = new MailOperations(); 
     //async Task<BackOfficeResponse<List<Country>>> 

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

     // GET: api/MAILAPI/5 
     public string Get(int id) 
     { 
      return "value"; 
     } 

     // POST: api/MAILAPI 
     public void Post([FromBody]string value) 
     { 
     } 

     // PUT: api/MAILAPI/5 
     public void Put(int id, [FromBody]string value) 
     { 
     } 

     // DELETE: api/MAILAPI/5 
     public void Delete(int id) 
     { 
     } 
    } 
} 

CŨNG NHẬN NuGet RESTORE LỖI TRÊN GIẢI PHÁP CÙNG Error Nuget failed to restore PNG

+1

Trình điều khiển trông giống như bạn đang cố gắng gọi? –

+0

Bạn gọi 'WebApiConfig.Register' ở đâu? – Richard

+0

@MitchelSellers sẽ thêm mã điều khiển – user3177519

Trả lời

15

Bạn cần phải đăng ký định tuyến cho web api TRƯỚC đăng ký định tuyến cho MVC , về cơ bản, chức năng App_Start() của bạn sẽ trông giống như sau:

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    GlobalConfiguration.Configure(WebApiConfig.Register);//WEB API 1st 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes);//MVC 2nd 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 
+0

xin lỗi nó không hoạt động. Trên thực tế tôi đã thử nó nếu bạn nhìn thấy bình luận thứ 5 của tôi trong các bình luận được đề cập. Tôi đã đề cập ở đó rằng tôi đã đặt dòng mã sau RegisterAllAreas(). Tôi cũng đã cập nhật mã câu hỏi ngay bây giờ – user3177519

+2

Bạn có chắc chắn rằng bạn đang gọi bộ điều khiển api của bạn một cách chính xác? Bởi vì nó hoạt động hoàn hảo trên bên của tôi.Try gọi url này nhưng rõ ràng là thay thế số cổng của tôi với bạn - http: // localhost: 37294/api/MAILAPI –

+0

Cảm ơn tôi đã làm một số sai lầm ngớ ngẩn. Nó cũng có thể do nuget khôi phục sau khi lỗi nuget giải quyết nó làm việc như một quyến rũ – user3177519

0

Chỉ cần thêm một dòng trong phương thức Application_Start() của trang asax toàn cục.

enter image description here

Các vấn đề liên quan