2016-10-09 12 views
1

をルーティングは、ここに私のGlobal.asmxWeb API 2カスタムコントローラメソッド。ここで問題

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

である私のWebApiConfigクラスです。ここで

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 } 
     ); 
    } 
} 

は、私がhttp://localhost:52072/api/hello/getを参照する場合、私は予想通り "getメソッド" バックされます私の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

更新ルートます。また、設定は、あなたの要求URLをルーティング試合属性、そしてあなたがGetの前に付ける必要があるのいずれか

[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

号今私は許可されていませんエラー405メソッドを取得します。 – CathalMF

+0

あなたのルートプレフィックスが機能します。もう1つは何らかの理由でではありません。ありがとう。 – CathalMF

+0

私の悪いチルダ(〜)は、コンベンションベースルーティングと属性ルーティングを混在させている状況で、通常のルートを使用してルートプレフィックスをオーバーライドすることです。 – Nkosi

0

ルート接頭辞を使用することができ

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"; 
    } 
} 

メソッド名の前に[HttpGet]の記法を付ける必要があります。

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

またはその前にメソッド名と接頭辞Getの名前を変更

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

いいえ、エラー405メソッドが許可されていません。 – CathalMF

+0

今すぐ確認する – Mostafiz

関連する問題