1

会社のコントローラーに認証機能があります

    [ActionName("Authenticate")]
    [HttpGet]
    public bool Authenticate(Company company)
    {
        if (Uow.Companies.AuthenticateCompany(company))            
            return true;                
        return false;
    }

これは、次のajaxクエリを使用して呼び出されます

$.ajax({ url: "/api/company/Authenticate", type: 'get', data: company })

会社はjsオブジェクトです

Company: function (name, phoneNumber, password) {
    this.Name = name;
    this.PhoneNumber = phoneNumber;
    this.password = password;
}

var company = new Company($('#TextBoxCompanyName').val(),'00000000', $('#TextBoxCompanyPassword').val());

私のAPIルートは次のとおりです

    config.Routes.MapHttpRoute(
        name: "Action",
        routeTemplate: "api/{controller}/{action}"
    );

コードが実行されると、WebAPIは会社のコントローラーで次の関数を呼び出します

 public Company Get(int id)
    {
        return Uow.Companies.GetById(id);
    }

カスタムget関数を呼び出すにはどうすればよいですか?

4

1 に答える 1

4

Web.APIは、定義順にルートを一致させようとします。

WebAPIルーティングとアクション/ルーティングとアクションの選択から

フレームワークは、URIパス内のセグメントをテンプレートに一致させようとします。テンプレート内のリテラルは完全に一致する必要があります。制約を指定しない限り、プレースホルダーは任意の値に一致します。フレームワークは、ホスト名やクエリパラメータなど、URIの他の部分と一致しません。フレームワークは、URIに一致するルートテーブルの最初のルートを選択します。

したがって、ルートの定義の順序が重要になります。

あなたはあなたの"Action" に置く必要があります"DefaultApi"

config.Routes.MapHttpRoute(
        name: "Action",
        routeTemplate: "api/{controller}/{action}"
    );

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

それ以外の場合、wep.apiはURL/api/company/Authenticateをcontroller=companyおよびid=Authenticateとして解釈し、Getアクションにルーティングします。

于 2013-01-28T20:59:23.410 に答える