2016-10-09 1 views
1

을 라우팅 내 Global.asmx웹 API 2 사용자 정의 컨트롤러 방법. 여기에 문제

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     GlobalConfiguration.Configure(WebApiConfig.Register);    
    } 
} 

가 여기 내 WebApiConfig 클래스입니다. 그때 내가 다시받을 예상대로 "방법을 얻을"것 http://localhost:52072/api/hello/get로 이동하는 경우

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

은 여기 내 ApiController

public class HelloController : ApiController 
{ 
    public string Get() 
    { 
     return "get method"; 
    } 

    [Route("SayHello")] 
    public string SayHello() 
    { 
     return "Hello Jim"; 
    } 
} 

입니다.

http://localhost:52072/api/hello/SayHello으로 이동하면 404 not found으로 오류가 발생합니다.

아이디어가 있으십니까?

답변

0

출처 : Attribute Routing in ASP.NET Web API 2

업데이트 경로

또한 경로 접두사를 사용할 수
public class PaymentController : ApiController { 
    public string Get() { 
     return "get method"; 
    } 

    //GET api/payment/SayHello 
    [HttpGet]  
    [Route("api/payment/SayHello")] 
    public string SayHello() { 
     return "Hello Jim"; 
    } 
} 

[RoutePrefix("api/payment")] 
public class PaymentController : ApiController { 
    //GET api/payment/Get 
    [HttpGet] 
    [Route("Get")] 
    public string Get() { 
     return "get method"; 
    } 
    //GET api/payment/Sayhello 
    [HttpGet] 
    [Route("SayHello")] 
    public string SayHello() { 
     return "Hello Jim"; 
    } 
} 
+0

번호 전에 메서드 이름과 접두사 Get 이름을 바꿀 수는 지금은 오류 405 방법은 허용되지 얻을. – CathalMF

+0

경로 프리픽스가 작동합니다. 다른 하나는 어떤 이유로 든하지 않습니다. 감사. – CathalMF

+0

물결표 (~)는 컨벤션 기반 라우팅과 속성 라우팅을 혼합하는 상황에서 정상 경로를 사용하여 경로 접두어를 재정의하는 것입니다. – Nkosi

0

설정이 요청 URL과 라우팅 일치하는 속성 및 중 당신이 Get 접두사 필요 메소드 이름 앞뒤에 [HttpGet] 어노테이션을 붙이는 방법

[HttpGet] 
[Route("api/payment/SayHello")] 
public string SayHello() 
{ 
    return "Hello Jim"; 
} 

하거나

[Route("api/payment/SayHello")] 
public string GetSayHello() 
{ 
    return "Hello Jim"; 
} 
+0

아니요. 이제 Error 405 Method Not Allowed가 표시됩니다. – CathalMF

+0

지금 업데이트 확인 – Mostafiz