2017-01-04 14 views
6

Tôi có một ứng dụng web sử dụng cả MVC và WebAPI2. Tôi muốn các yêu cầu luôn được kết hợp với các tuyến thuộc tính WebAPI2 trước khi khớp các tuyến MVC được cấu hình thủ công. Tôi đã thử gọi configuration.MapHttpAttributeRoutes() trước khi tôi gọi RouteConfig.RegisterRoutes(RouteTable.Routes) nhưng điều này dường như không hoạt động.Đảm bảo rằng các tuyến đường WebAPI2 được đối sánh trước các Tuyến MVC

Có cách nào để đảm bảo các tuyến đường WebAPI2 luôn được ưu tiên không?

+7

Quy ước cho tuyến API Web là đặt tiền tố cho tuyến đường bằng "api" và thậm chí là phiên bản "v1". Điều này sẽ tách biệt chúng khỏi các tuyến MVC, vậy tại sao bạn quan tâm đến thứ tự trừ khi bạn đang chia sẻ một quy ước giữa MVC và Web API? –

Trả lời

0

Cho phép điều này. Sử dụng VS để tạo bộ điều khiển mới. Hãy chắc chắn nó được gọi là someController, trong đó một số là tên của controller của bạn, nó phải kết thúc bằng "Controller". Hãy chắc chắn rằng lớp của bạn kế thừa ApiController ...

public class someController : ApiController 
    { 
     [Route("api/test/{name}"), HttpGet] 
     public string Router(string name) 
     { 
      return "Your name is: " + name; 
     }   
    } 

Ngoài ra, hãy thêm điều này vào tệp global.asax của bạn.

protected void Application_Start(object sender, EventArgs e) 
    { 
     GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); //This will remove XML serialization and return everything in JSON. 

     GlobalConfiguration.Configuration.MapHttpAttributeRoutes(); 
     GlobalConfiguration.Configuration.EnsureInitialized(); 
    } 

Ở trên, tuyến api đang chờ HttpGet, Bạn cũng có thể sử dụng HttpPost và sử dụng FormDataCollection để nhận dữ liệu biểu mẫu đã đăng. Lưu ý cách bạn có thể tham số hóa API của mình bằng {someparameter}

Điều trên khá đơn giản và bộ điều khiển API có thể tuần tự hóa hầu hết các đối tượng thực hiện tuần tự hóa. Nếu không thể sử dụng NewtonSoft hay gì đó.

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