2014-01-17 35 views
13

我有一個Web API的行動,如下所示:如何使用帶有複雜對象參數的ASP.NET Web API屬性路由?

[HttpGet] 
[Route("api/query/hello/{query}")] 
public HttpResponseMessage Hello([FromUri]Query query) 
{ 
    return null; 
} 

在查詢類有一個名爲QueryText公共字符串屬性。當我點擊以下URL時,出現404錯誤:

/api/query/hello?QueryText=bacon 

在我開始使用屬性路由之前,這工作。如果我沒有參數或原始類型參數,我可以使屬性路由工作。但是,一個複雜的參數,我得到404s。屬性路由如何處理複雜的動作參數?它是否與FromUri屬性兼容?

+0

我不能瑞普您的方案......你可以分享你的路由配置看起來像......特別是在'內容WebApiConfig.cs' –

+5

嗯,培根.... – barrypicker

+1

@KiranChalla我想我意外地解決了我自己的問題。我推敲了示例代碼。我編輯了我的問題,以反映我使用的原始代碼。請注意路由模板中的{query}標記。如果我刪除這個令牌,我相信它按照要求工作。 – user2719100

回答

7

這裏的解決方案是Route定義中的{query}標記是多餘的。刪除它,如下,解決了該問題:?

[Route("api/query/hello")] 
+0

男人,我很希望我可以做一個+5!在星期五晚上一直在這裏掙扎30分鐘!謝謝! – dotnetguy

+0

如何通過url編碼參數對http進行更改? – Zapnologica

1

因爲您正在讀取URL,所以需要[FromUri]屬性。您的路線應該是這個樣子:

public HttpResponseMessage Hello([FromUri]Query query) 
{ 
    //Implement whatever 
    return null; 
} 

/API/{控制器名稱} /你好QUERYTEXT =培根

應該然後正常工作。

模型活頁夾將採取您提供的任何查詢參數,然後嘗試綁定該對象內的任何內容。在你首先工作之後,我會擔心Route Attribute。

+1

我簡化了示例以更好地交流問題。實際的參數類包含比單個字符串屬性多:) – user2719100

相關問題