在WCF REST中,我可以定義一個嚴格的URL模板。ASP.NET MVC Web API 4 - Complexe URL模板
在ASP.NET MVC Web API 4我有一個問題。
我註冊爲正常的路線:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我的控制器有這樣的方法:
// POST /api/documents
public HttpResponseMessage<Document> Post(Document document)
{...}
如果我送這個URL「http://servername.com一個POST請求: 53835/api/Documents/「(參數」1337「不應該在那裏),它調用Post(Document document)方法。但我想,框架在這種情況下顯示一個錯誤。 (例如「找不到此請求的API調用」)。
休息WCF我能嚴格配置此... 我並不熱衷這種「約定優於配置」 ......
我怎麼可以做更多的配合物的網址模板?
- 我想是這樣的:
的GET請求與該URL模板的API: 「http://servername.com:53835/api/Documents/1337」 獲取特定的文檔對象(包含創建日期,創建者等元數據...)。
另一個GET請求應該找回的文件本身(如流),以這樣的URL: http://servername.com:53835/api/Documents/1337/File
我如何定義這種差異? 用於獲取文檔對象一開始的方法是這樣的:
// GET /api/documents/5
public HttpResponseMessage<Document> Get(int id)
{...}
我如何定義具有相同的參數(在這種情況下,「ID」)一個單獨的方法?我是否必須使用WCF REST-Projects中的方法屬性來配置URL模板?
我可以編輯{動作}佔位符這樣的路由:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{mandant}/{controller}/{id}/{action}",
defaults: new { mandant = "profile", id = RouteParameter.Optional, action = RouteParameter .Optional}
);
,然後我可以使用的方法的屬性[ActionName( 「文件」)]和的[AcceptVerbs( 「GET」)]躺在這樣的:
[ActionName("File")]
[AcceptVerbs("GET")]
public HttpResponseMessage FileDownload(int id)
然後我可以叫: 「http://servername.com:53835/api/Documents/1337/File」 來獲取文件。 但是如果我想要更多這些「行動」呢?
- 一個複雜的用例將是一個帶有重複部分的URL。 類似於:(在這種情況下,我有一些項目的特點。數這一特性應變量)
http://servername.com:53835/api/Documents/characteristic_1/characteristic_2/characteristic_3 http://servername.com:53835/api/Documents/characteristic_1/characteristic_2
與特徵的部分應該是動態的/可變的。
什麼是ActionFilter?我沒有發現WebApi-ActionFilter。我能用他們做什麼? – user437899