0

PersonController クラスに次の関数があります

    [HttpGet]
    [ActionName("GetBloggersNotFollowed")]
    public IQueryable<object> GetBloggersNotFollowed(int companyId)
    {
        return Uow.People.GetPeople().Select(p => new { p.Email, p.FirstName, p.LastName, p.PhoneNumber, p.Type, p.UserName, p.Country, p.Id });
    }

人のリストを取得するために使用されます。

私はそのように関数を呼び出します

$.ajax({ 
   url: "/api/person/GetBloggersNotFollowed/1" 
}).success(function (people) { 
     PersonModule.GetPeople(people); 
});

そして、私はルートを宣言しましたWebApiConfig.cs

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

ブラウザでルートを呼び出そうとすると、エラーが発生します

<Error>
 <Message>
  No HTTP resource was found that matches the request URI 'http://localhost:1045/api/person/GetBloggersNotFollowed/1'.
  </Message>
  <MessageDetail>
       No action was found on the controller 'Person' that matches the request.
  </MessageDetail>
</Error>

ここで間違ったのかわかりません。誰でも問題を見ることができますか?

4

2 に答える 2

1

Replace your your route to this one:

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

This answer complements Mark Jones' answer.

于 2012-12-28T17:25:01.917 に答える
1

パラメータの名前は、ルート マッチングにとって重要です。

ルートでパラメーターidに名前を付けましたが、メソッドにはcompanyId.

{id}ルートを に変更するか、パラメータを に{companyId}変更します。companyIdid

于 2012-12-28T17:19:58.417 に答える