在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