2011-04-20 6 views
5

Tôi đang trống và cần một bàn tay nhanh. Google đã thất bại với tôi. Tôi đang làm việc trên thay thế WCF/REST Starter Kit với ASP.NET MVC. Tôi muốn làm cho quá trình chuyển đổi như đau càng tốt vì vậy tôi đang cố gắng để tạo ra một lộ trình để phù hợp với URL sau:Vấn đề ASP.NET MVC 2 - Chấm vào Tuyến đường

http://localhost/services/MyService.svc/UserInfo 

tôi tạo ra các tuyến đường trong Global.asax.cs:

routes.MapRoute(
      "MyServiceDefault", 
      "services/MyService.svc/{action}/{id}", 
      new { 
        controller = "MyService", 
        action = "UserInfo", 
        id = UrlParameter.Optional 
       } 
     ); 

Tôi sớm nhận ra rằng yêu cầu thậm chí không đưa nó vào ứng dụng của tôi vì số . trong phần MyService.svc của URL.

Tôi thiếu gì để buộc yêu cầu chuyển đến ứng dụng của tôi thay vì bị xử lý bởi máy chủ dưới dạng tài nguyên tĩnh?

Cập nhật

tôi quên đề cập đến mà tôi cũng đã cố gắng thêm dòng sau vào web.config để avail không có:

<httpRuntime relaxedUrlToFileSystemMapping="true" /> 

Trả lời

5

Hóa ra việc tìm kiếm kết hợp cụm từ chính xác cuối cùng sẽ mang lại kết quả. Phil Haack thực sự có một bài khối về vấn đề này chính xác:

Overriding a .svc Request With Routing

Nó chỉ ra rằng đối với phần mở rộng * .svc, chỉ cần thêm <httpRuntime relaxedUrlToFileSystemMapping="true" /> vào Web.config là không đủ.

Trong một trong các tệp khuôn khổ Web.config, có một nhà cung cấp xây dựng được liên kết với * .svc để tiếp nhận yêu cầu trước khi nó đến .NET MVC (và không thành công vì đây không thực sự là dịch vụ WCF) . Khi bạn biết điều đó, bạn có thể dễ dàng xóa nhà cung cấp dịch vụ xây dựng trong Web.config của ứng dụng của bạn:

<system.web> 
    <compilation debug="true" targetFramework="4.0"> 
    <buildProviders> 
     <remove extension=".svc"/>    
    </buildProviders> 
    ... 
</system.web> 
+0

thú vị. tôi sẽ ghi lại điều này. –

0

Hãy nhìn vào các RouteCollection.RouteExistingFiles tài sản. Theo mặc định, giá trị này được đặt thành false. Có thể dịch vụ của bạn nằm trong đường dẫn Dịch vụ trong dự án của bạn và điều này đang gây ra sự cố.

+0

Mặc dù tôi không có thư mục Dịch vụ, tôi vẫn chụp. Không may mắn. Ứng dụng của tôi vẫn không xử lý được tuyến đường. –

0

article này cho biết cách bạn có thể sử dụng các tiện ích mở rộng khác nhau với ứng dụng asp.net mvc và vẫn làm cho chúng định tuyến đến .NET framework. đặc biệt chú ý đến phần bắt đầu bằng

This is done using a script named registermvc.wsf.