2012-10-29 69 views
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」屬性和我的要求看起來像一個字符串此:(搜索模型的實例是空的)

本地主機:3039/API/personapi /姓= &姓氏= &出生日期= 1/1/0001%2012:00:00%20AM &性別= 0 & PageIndex = 0 & PageSize = 20 &的SortExpression = & TotalItemCount = 0 & TotalPageCount = 0 & &取= 3 &跳過= 0 &頁面= 1 &的pageSize = 3

基於我從MVC3知道它應該將網址映射到搜索模式並選擇第二個獲取,但我得到「在我的螢火蟲中找到與請求匹配的多個操作」異常。我該怎麼辦?謝謝

回答

0

你不能在控制器的MVC中做的一件事是過載一個函數。

對於額外的參數,將其設置爲可選項並檢查分配給它的默認值。

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 
} 

這對我的作品有MVC 3和我想它也應該爲MVC 4

相關問題