1

私のUserControllerには次のメソッドがあります。最初の2つはRegisterVerifyUserです。Route属性を使用した不正なエンドポイント起動

しかし、私はログインを呼び出すことができません。私が試したURLの組み合わせに関係なく、Registerメソッドが起動します。

[RoutePrefix("api/user")] 
public class UserController : ApiController 
{ 
    [Route("Register")] 
    [HttpPost] 
    public HttpResponseMessage Register([FromBody]RegisterUserModel model) 
    { 
     .... 
    } 

    [HttpGet] 
    [Route("{email}/{verifyId}")] 
    public HttpResponseMessage VerifyUser(string email, string verifyId) 
    { 
     .... 
    } 

    [Route("Login")] //Not being fired - Register being fired 
    [HttpPost] 
    public HttpResponseMessage Login([FromBody]RegisterUserModel userMod) 
    { 
     .... 
    } 
} 

明らかなものがありませんか?何が起こっている

+0

だけの推測では、多分それはVerifyUserに落ちますか? –

+0

'Login'を呼び出すときに' Register'ルートが呼び出されています – TomSelleck

+0

@TomcelicどのURLが呼び出されているのですか? 'WebApiConfig'、つまり' config.MapHttpAttributeRoutes() 'で属性ルーティングが有効になっていることを確認してください。 – Nkosi

答えて

1

は、あなたが最も可能性の高いデフォルトの規則ベースのルートを持っているということであるだけ

最初に登録するマップや Loginをチェックする気にしないだろう
// Convention-based routing. 
config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

api/user/Loginを呼び出すとLoginidプレースホルダにマップされている慣習経路にマップされます。ルート表は、HTTP動詞POSTを使用して、指定された本文でポストを処理できる最初のアクションを検索します。それは最初に登録簿を見つけ、その行動にマッピングするでしょう。属性は、ルーティングを確実にする

チェックは以下のコメントをアクションにマップするURLを示し

// Attribute routing. 
config.MapHttpAttributeRoutes(); 

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

すなわちWebApiConfigで有効になっています。正しいルートを見つけるためにしようとしたとき

[RoutePrefix("api/user")] 
public class UserController : ApiController { 

    //Matches POST api/user/register 
    [Route("Register")] 
    [HttpPost] 
    public IHttpActionResult Register([FromBody]RegisterUserModel model) { 
     //.... 
    } 

    //Matches GET api/user/some_email/some_id 
    [HttpGet] 
    [Route("{email}/{verifyId}")] 
    public IHttpActionResult VerifyUser(string email, string verifyId) { 
     //.... 
    } 

    //Matches POST api/user/login 
    [Route("Login")] 
    [HttpPost] 
    public IHttpActionResult Login([FromBody]RegisterUserModel userMod) { 
     //.... 
    } 
} 

リファレンスAttribute Routing in ASP.NET Web API 2

関連する問題