2016-11-29 78 views
3

我有以下的Web API控制器的Web API控制器 - 在查詢字符串「行動」參數

public class ApiController : Controller 
{ 
    [Route("api/test")] 
    [HttpGet] 
    public string GetData(string key, string action, long id) 
    { 
     var actionFromQuery = Request.Query["action"]; 
     return $"{key} {action} {id}"; 
    } 
} 

我需要一個名爲查詢字符串「行動」參數所以它與現有的API向後兼容。
當我發出get請求時,action方法參數被錯誤地分配給web api action == controller method name。

例GET
http://SERVER_IP/api/test?key=123&action=testAction&id=456
返回 「123的GetData 456」

我希望它返回 「123 testAction 456」
actionFromQuery變量被正確地分配給 'testAction'。
'行動'是一個保留的變量,不能被覆蓋?
我可以通過更改某些配置來解決這個問題嗎?

我沒有配置任何路由,只有services.AddMvc();和app.UseMvc();在我的啓動。

+4

嘗試註釋[FromUri]'屬性的'action'參數 –

+1

謝謝,添加'[FromQuery]'修復了它(使用ASP.NET Core)。 添加這個答案作爲答案,我會接受它。 – stkxchng

回答

1

解決由於this comment

添加[FromQuery]幫助和變量正確分配

public class ApiController : Controller 
{ 
    [Route("api/test")] 
    [HttpGet] 
    public string GetData(string key, [FromQuery] string action, long id) 
    { 
     return $"{key} {action} {id}"; 
    } 
} 
0

在WebApi路由中,Action參數與路徑定義中的佔位符搭配在花括號中,例如,/API/{foobar的}/{巴茲}。

您面臨的問題是{controller}和{action}是「特殊」佔位符,分別爲Controller和Action方法的名稱保留(儘管後者通常從WebApi路由中省略)。

我一直沒能找到一個辦法解決它尚未雖然:(

相關問題