0

MVC WebAPI で GET 関数を呼び出そうとすると、次の例外が発生します

 {"$id":"1","Message":"An error has occurred.",
 "ExceptionMessage":"Multiple actions were found that match the request: 
 \r\nSystem.Xml.XmlNode Get(Int32, System.String) 

この問題は、2 つの関数を定義した 2 つの get 関数が原因であると思います。

1:

   [HttpGet]
   public XmlNode Get(int id, string Tokken)
   {
        //Do something
   }

二つ目

 [HttpGet]
 public List<UsersAnswers> GetUsersInteractions(int? activityID, string Tokken)
 {
  // Do Something
 }

ルート構成

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

2番目の関数を呼び出そうとすると、例外が発生します。

{SiteURL}/api/Activities/GetUsersInteractions?activityID=32&Tokken=r54e54353

ご覧のとおり、ルート エンジンはリクエストを 2 番目の関数ではなく最初の関数に送信しました。

2 つの get 操作を定義し、それぞれを個別に呼び出すにはどうすればよいですか?

4

2 に答える 2

4

既定のルーティング テンプレートでは、Web API は HTTP メソッドを使用してアクションを選択します。ただし、アクション名が URI に含まれるルートを作成することもできます。

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

このルート テンプレートでは、 {action} パラメーターがコントローラーのアクション メソッドに名前を付けます。このスタイルのルーティングでは、属性を使用して、許可される HTTP メソッドを指定します。たとえば、コントローラーに次のメソッドがあるとします。

public class ProductsController : ApiController
{
    [HttpGet]
    public string Details(int id);
}

この場合、「api/products/details/1」に対する GET リクエストが Details メソッドにマップされます。このスタイルのルーティングは ASP.NET MVC に似ており、RPC スタイルの API に適している場合があります。

ActionName 属性を使用して、アクション名をオーバーライドできます。次の例では、「api/products/thumbnail/id」にマップされる 2 つのアクションがあります。1 つは GET をサポートし、もう 1 つは POST をサポートします。

public class ProductsController : ApiController
{
    [HttpGet]
    [ActionName("Thumbnail")]
    public HttpResponseMessage GetThumbnailImage(int id);

    [HttpPost]
    [ActionName("Thumbnail")]
    public void AddThumbnailImage(int id);
}
于 2013-03-22T10:28:17.637 に答える
1

2 番目の関数を呼び出していません。2 番目の関数には名前が付けられInsertUserRecordており、POSTメソッドです。呼び出している関数GETGetUserInteractions. にはそのような関数がないためGET、エンジンはこれを存在する唯一のGET関数にマップすることがありますが、実際には「そのような関数はありません」というエラーをスローする必要があります。

于 2013-03-22T10:25:04.893 に答える