0

私は MVC4 の ApiControllers が初めてで、以下のような異なる引数セットを使用して Api Controller を取得する必要があります。

public Models.Response Get(int skip, int take, int pageSize, int page)
{
    //do something
}

public Models.Response Get(int skip, int take, int pageSize, int page, PersonSearchModel personSearchModel)
{
    //search with search model
}

「PersonSearchModel」プロパティの文字列を作成すると、リクエストは次のようになります: (検索モデルのインスタンスは空でした)

localhost:3039/api/personapi/?Firstname=&Lastname=&BirthDate=1/1/0001%2012:00:00%20AM&Gender=0&PageIndex=0&PageSize=20&SortExpression=&TotalItemCount=0&TotalPageCount=0&&take=3&skip=0&page=1&pageSize=3

私がMVC3から知っていることに基づいて、URLを検索モデルにマップし、2番目のGetを選択することになっていますが、firebugで「リクエストに一致する複数のアクションが見つかりました」という例外が発生します。私は何をすべきか?ありがとう

4

2 に答える 2

0

コントローラのMVCで実行できないことの1つは、関数のオーバーロードです。

追加パラメータについては、オプションとして設定し、割り当てたデフォルト値を確認してください。

于 2012-10-29T15:31:56.923 に答える
0

リクエストパラメータをチェックするActionMethodSelectorAttributeから派生したカスタム属性を作成できます。IsValidForRequestメソッドを無効にする必要があります。それは次のようなものかもしれません

public class RequireRequestValueAttribute : ActionMethodSelectorAttribute
{
    public RequireRequestValueAttribute(valueName)
    {
        ValueName = valueName;
    }
    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        return (controllerContext.HttpContext.Request[ValueName] != null);
        }
    }
    public string ValueName { get; private set; }
} 

(これを拡張して、複数のパラメーターをチェックすることができます)

この属性は、次のようなメソッドで使用します

public Models.Response Get(int skip, int take, int pageSize, int page)
{
    //do something
}

[RequireRequestValue("personSearchModel")]
public Models.Response Get(int skip, int take, int pageSize, int page, PersonSearchModel personSearchModel)
{
    //search with search model
}

これはMVC3で機能し、MVC4でも機能すると思います。

于 2012-10-29T15:33:13.540 に答える