2015-02-04 2 views
2

기존 ASP.NET 응용 프로그램에 Web API 기능을 추가하려고합니다. 이것은 단순해야하지만 몇 시간 동안 붙어 있습니다. 나는 많은 것들을 시도했지만 지금까지는 운이 없다.api 폴더에서 레거시 asmx 서비스로 Web Api 2 라우트 구성

"/ api"폴더에 여러 개의 asmx 서비스가 있습니다. 이것은 어떻게 든 웹 API 라우팅을 방해합니다. 이상적으로는 기존 서비스가 외부 참조이므로 현재 서비스를 현재 위치에 보관하고 싶습니다.

샘플 서비스 : /Api/ApiServ.asmx - 나는 방법 목록

나는 서비스, 예를 들어 중 하나에 모든 메소드를 호출 할 때 문제가 함께 초기 화면을 호출 할 수 있어요 /Api/ApiServ.asmx/ServMethod -이를 호출 할 수 없습니다 나는이 응답 받고 있어요 : "요청 URI 'http://localhost:49415/api/apiserv.asmx/ServMethod'없음 HTTP 리소스를 찾을 수 없었다 일치"여기

내가 무엇을 가지고 : 글로벌 .asax :

public class WebApiApplication : HttpApplication 
{ 
    protected void Application_Start() 
    {    
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     //RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 
} 

샘플 서비스 :

namespace WebApiTest.Api 
{ 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    [ToolboxItem(false)]  
    [ScriptService] 
    public class ApiServ : WebService 
    { 
     [WebMethod] 
     public string ServMethod() 
     { 
      return "Test"; 
     } 
    } 
} 

웹 API 광고 구성 :

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.IgnoreRoute("asmx", "api/{resource}.asmx/{*pathInfo}");   

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

이상하게도 경로 debbuger를 사용할 때 실제로 asmx 무시 경로와 일치하지만 서비스 메소드는 적중되지 않습니다. 어떤 도움을 주셔서 감사합니다!

답변

0

해결책을 할당하기 위해 할당 한 시간이 다 떨어지기 때문에 실제로 적절한 해결 방법을 찾지 못했지만 솔루션이 일시적이어서 asmx 서비스를 웹 API 컨트롤러로 옮길 예정이므로 해결 방법을 결정했습니다. . 는 1)/API 폴더에서 나는/레거시 하위 폴더를 생성하고 Global.asax에 Application_BeginRequest에서이

2) 모든 ASMX 서비스를 이동 :

private void Application_BeginRequest(object sender, EventArgs e) 
{ 
    string url = Request.Url.AbsolutePath.ToLower(); 

    if (url.StartsWith("/api") && url.Contains(".asmx") && !url.Contains("/api/legacy/")) 
    { 
     url = Request.Url.AbsolutePath.Replace("/api/", "/api/legacy/"); 

     Context.RewritePath(url); 
    } 
} 

내가 무슨 짓을 다시 쓰기 모듈을 사용하는 것과 같은 더 교양있는 방식으로 비슷한 일이 이루어질 수도 있지만, 이는 임시 해결책으로 작용합니다. "(

routes.IgnoreRoute : 당신이 당신의 RouteConfig.cs에 다음 줄을 추가해야합니다

당신이 당신의 API에 MVC 부분이있는 경우

0

(웹 API 도움말 페이지가 추가됩니다 MVC) {리소스} .asmx/{* pathInfo} ");

그리고 그 트릭을 할 것입니다!